从另一列中的值替换(gsub)列中的所有行?

时间:2019-02-22 17:16:48

标签: r

假设我有一个数据框,

   df = data.frame ( a = c(1,14,15,11) , b= c("xxxchrxxx","xxxchryy","zzchrzz","aachraa") )
       a   b
    1  1 xxxchrxxx
    2 14 xxxchryy
    3 15 zzchrzz
    4 11 aachraa

我要用chrx替换b列中的chr,x从a列中派生

   a   b
1  1 xxxchr1xxx
2 14 xxxchr14yy
3 15 zzchr15zz
4 11 aachr11aa

但是我无法让gsub正常工作,因为它只需要一个元素

df$b = gsub ( "chr",paste0("chr",df$a), df$b)

有什么办法吗?

3 个答案:

答案 0 :(得分:2)

编辑::使用stringr

stringr::str_replace_all(df$b,"chr",paste0("chr",df$a))

继续paste0

df$b<-paste0(df$b,df$a)
   a     b
1  1  chr1
2 14 chr14
3 15 chr15
4 11 chr11

答案 1 :(得分:2)

原因是gsub replacement仅采用长度为1的向量。根据?gsub

  

替换-如果提供了长度为2或更大的字符矢量,则第一个元素带有警告。

如果需要矢量替换,请使用str_replace

library(stringr)
str_replace(df$b, "chr", paste0("chr", df$a))
#[1] "xxxchr1xxx" "xxxchr14yy" "zzchr15zz"  "aachr11aa" 

根据示例,它只是一个简单的paste

df$b <- with(df, paste0(b, a))

答案 2 :(得分:1)

df = data.frame ( a = c(1,14,15,11) , b= c("chr","chr","chr","chr") )
df$b <- paste0(df$b, df$a)
df
#>    a     b
#> 1  1  chr1
#> 2 14 chr14
#> 3 15 chr15
#> 4 11 chr11

reprex package(v0.2.1)于2019-02-22创建