【问题标题】:Add characters to a numeric column in dataframe将字符添加到数据框中的数字列
【发布时间】:2011-12-25 07:00:03
【问题描述】:

我有一个这样的数据框:

  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 中做到这一点?

【问题讨论】:

  • ?paste(特别注意sep参数)

标签: r replace add dataframe


【解决方案1】:

正则表达式模式“^”(在任何字符类括号之外)表示“字符”类项(在其他计算机语言中也称为“字符串”)的第一个字符之前的点。这只是将向量中每个“字符”元素的开头替换为“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=""),但我认为正则表达式解决方案可能更简洁。

【讨论】:

  • 大锤对坚果说了什么?我会把你砸成paste
  • 如果我需要在数字后面添加chr?即,1chr, 2chr, etc.
  • @ah bon paste(dat$V1, "chr", ... 似乎是对第二种解决方案的明显修改。而sub("$", "chr", dat$V1) 将是第一个解决方案的相应修改,请注意第二个建议中的模式“$”是正则表达式字符串结尾标记而不是 R 提取运算符,
【解决方案2】:

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") 
    

    【讨论】:

    • 如何在多个列上使用交互? df[,2:3] &lt;- interaction(df[2:3], "addtext", sep ="") 抛出排序错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多