1

假设我有一个这样的数据框,

   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)

有什么办法吗?

4

3 回答 3

3

原因是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))
于 2019-02-22T17:22:23.480 回答
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
于 2019-02-22T17:21:06.397 回答
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 包(v0.2.1)于 2019 年 2 月 22 日创建

于 2019-02-22T17:20:15.530 回答