Добавить символы в числовой столбец в кадре данных - PullRequest
16 голосов
/ 09 ноября 2011

У меня есть такой фрейм данных:

  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 

Я хочу изменить столбец V1 и добавить chr перед номером. Просто так:

  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 

Есть ли способ сделать это в R?

Ответы [ 3 ]

24 голосов
/ 09 ноября 2011

Шаблон регулярного выражения «^» (вне любых скобок символьного класса) представляет точку непосредственно перед первым символом элемента «символьного» класса (также называемого «строка» в других компьютерных языках).Это просто заменяет начало каждого элемента «персонажа» в векторе на «chr».Он неявно приводит «числовое» входное значение к «символу», поэтому меняет режим результата.

> 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

Конечно, можно было бы использовать paste("chr", dat$V1, sep=""), но я подумал, что решение для регулярных выражений может быть более подходящим.

6 голосов
/ 10 ноября 2011

sprintf намного мощнее простой конкатенации.

dat$V1 <- sprintf('chr%i', dat$V1)
4 голосов
/ 09 июля 2015

Мы также можем использовать interaction:

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

Или используя sqldf:

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