假设我们有一个数据框如下:
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])
}
还尝试过使用应用功能,但无法达到预期的效果。
在这方面的任何帮助将受到高度赞赏。提前致谢!
答案 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)))