我有一个这样的数据框:
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中这样做?
答案 0 :(得分:23)
正则表达式模式“^”(在任何字符类括号之外)表示“字符” - 类项目(在其他计算机语言中称为“字符串”)的第一个字符之前的点。这只是用“chr”的词干替换向量中每个“character”元素的开头。它隐含地将“数字”输入值强制转换为“字符”,因此改变了结果的模式。
> 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="")
,但我认为正则表达式解决方案可能更整洁。
答案 1 :(得分:6)
sprintf比普通连接更强大。
dat$V1 <- sprintf('chr%i', dat$V1)
答案 2 :(得分:4)
我们也可以使用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")