假设我有一个数据框,
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)
有什么办法吗?
答案 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创建