Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 是否从另一列中的值替换(gsub)列中的所有行?_R - Fatal编程技术网

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

R 是否从另一列中的值替换(gsub)列中的所有行?,r,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 xxxchr

假设我有一个这样的数据帧

   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)
有办法吗

df=数据。帧a=c1,14,15,11,b=cchr,chr,chr,chr df$b a b >1 1 chr1 >2 14 chr14 >3 15 chr15 >4.11.11 于2019-02-22由v0.2.1创建,df=data.frame a=c1,14,15,11,b=cchr,chr,chr,chr df$b a b >1 1 chr1 >2 14 chr14 >3 15 chr15 >4.11.11 于2019年2月22日由v0.2.1版编辑::使用stringr创建:

继续使用paste0:

编辑::使用stringr:

继续使用paste0:

原因是gsub替换只接受长度为1的向量。根据?gsub

替换-如果提供长度为2或更长的字符向量,则第一个元素将与警告一起使用

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

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

原因是gsub替换只接受长度为1的向量。根据?gsub

替换-如果提供长度为2或更长的字符向量,则第一个元素将与警告一起使用

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

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


也可以使用粘贴df$b:df$b对不起,我应该让我的示例更好,但问题是我需要使用gsub,因为b中的字符串可能很复杂,比如aaa.chr.xxx,所以需要明确地替换它?我会编辑我的问题,也可以使用粘贴df$b:df$b对不起,我应该让我的示例更好,但问题是我需要使用gsub,因为b中的字符串可能很复杂,比如aaa.chr.xxx,所以需要明确地替换它?我将编辑我的问题
stringr::str_replace_all(df$b,"chr",paste0("chr",df$a))
df$b<-paste0(df$b,df$a)
   a     b
1  1  chr1
2 14 chr14
3 15 chr15
4 11 chr11
library(stringr)
str_replace(df$b, "chr", paste0("chr", df$a))
#[1] "xxxchr1xxx" "xxxchr14yy" "zzchr15zz"  "aachr11aa" 
df$b <- with(df, paste0(b, a))