使用R中数据框中不同列的字符串替换两列中的公共字符串

时间:2016-06-30 11:38:46

标签: r lapply

假设我们有一个数据框如下:

test<-data.frame(v1=c(1:10),v2=c(rep("a x",10)),v3=c(rep(c("a b","a c","a d","a e","a f"),2)),v4=c((rep("p",5)),rep("q",5)))

基本上,我们需要更换&#34; a&#34;在第2列和第3列的字符串中使用第4列中提到的字符串。结果数据框理想情况应如下所示:

result<-data.frame(v1=c(1:10),v2=c(rep("p x",5),rep("q x",5)),v3=c("p b","p c","p d","p e","p f","q b","q c","q d","q e","q f"),v4=c((rep("p",5)),rep("q",5)))

尝试了以下方法来获得相同的内容:

for (i in 1:nrow(test))
{
test[i,2]<-gsub("a",test[i,4],test[,2])
test[i,3]<-gsub("a",test[i,4],test[,3])
}

还尝试过使用应用功能,但无法达到预期的效果。

在这方面的任何帮助将受到高度赞赏。提前致谢!

2 个答案:

答案 0 :(得分:1)

也许这个? (不确定你需要代码的通用性)

test2 <- test
test2$v2 <- mapply(gsub ,  "a" , test$v4 , test$v2)
test2$v3 <- mapply(gsub ,  "a" , test$v4 , test$v3)

答案 1 :(得分:1)

我们可以遍历列,删除&#39; a&#39;和paste使用&#39; v4&#39;

test[2:3] <- lapply(test[2:3], function(x) paste0(test$v4, sub("a", "", x)))