2011-11-09 10 views
12

Mam dataframe takiego:Dodaj znaki do kolumny numerycznej w dataframe

V1  V2  V3 
1 1 3423086 3423685 
2 1 3467184 3467723 
3 1 4115236 4115672 
4 1 5202437 5203057 
5 2 7132558 7133089 
6 2 7448688 7449283 

Chcę zmienić kolumnę V1 i dodać Chr przed numerem. Po prostu tak:

V1  V2  V3 
1 chr1 3423086 3423685 
2 chr1 3467184 3467723 
3 chr1 4115236 4115672 
4 chr1 5202437 5203057 
5 chr2 7132558 7133089 
6 chr2 7448688 7449283 

Czy istnieje sposób, aby to zrobić w R?

+0

'paste' (ze szczególnym zwróceniem uwagi na' sep' argument) –

Odpowiedz

17

Wzorzec regex "^" (poza nawiasami znaków) reprezentuje punkt tuż przed pierwszym znakiem elementu "znakowego" (zwanego też "ciągiem" w innych językach komputerowych). To właśnie zastępuje początek każdego elementu "znaku" w wektorze z trzpieniem "chr". Niejawnie wymusza "numeryczną" wartość wejściową na "znak", co zmienia tryb wyniku.

> dat$V1 <- sub("^", "chr", dat$V1) 
> dat 
    V1  V2  V3 
1 chr1 3423086 3423685 
2 chr1 3467184 3467723 
3 chr1 4115236 4115672 
4 chr1 5202437 5203057 
5 chr2 7132558 7133089 
6 chr2 7448688 7449283 

można oczywiście wykorzystali paste("chr", dat$V1, sep=""), ale myślałem, że to rozwiązanie może być regex neater.

+0

Dziękuję Dwin. Mi to pasuje! :) – Lisann

+3

Co młokos powiedział do orzecha? Rozwalę cię w "paste". – Andrie

5

sprintf jest o wiele potężniejszy niż zwykłe łączenie.

dat$V1 <- sprintf('chr%i', dat$V1) 
3

Możemy również użyć interaction:

df$V1 <- interaction("chr", df$V1, sep = "") 
df 

lub używając sqldf:

library(sqldf)  
df$V1 <- as.character(df$V1) 
df$V1 <- sqldf("select 'chr'|| V1 as V1 from df") 
+0

Jak korzystać z interakcji w wielu kolumnach? 'df [, 2: 3] <- interakcja (df [2: 3]," addtext ", sep =" ")" wyrzuca błąd sortowania – Vasim