2011-11-09 13 views
12

我有这样一个数据帧:到数字列添加字符数据帧

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

'paste'(特别注意'sep'参数) –

回答

17

正则表达式模式“^”(任何字符类括号外)代表只是一个“字符”级(在其他计算机语言又名“串”)项的第一字符之前的点。这只是用“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=""),但我认为一个正则表达式的解决方案可能是整洁。

+0

谢谢迪文。这个对我有用! :) – Lisann

+3

什么了大锤说螺母?我会粉碎你成'粘贴'。 – Andrie

5

sprintf的是很多比普通级联功能更强大。

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

我们也可以使用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") 
+0

如何在多列上使用交互? 'DF [2:3] < - 相互作用(DF [2:3], “addtext”,月= “”)'抛出排序错误 – Vasim

相关问题