我有一个数据框
test<-data.frame(A=c("aa","be","cg","dh"),B=c("i","i","i","i"))
A B
1 aa i
2 be i
3 cg i
4 dh i
我想将 B
列中的 i
替换为 yes
仅当 B
列中的字符串 >e
被发现。
所以最后应该是这样的
A B
1 aa i
2 be yes
3 cg i
4 dh i
我试过了
test[(grep("e", test$A)),] <- as.data.frame(lapply(test, gsub, pattern= "i", replacement="yes", test$B))
虽然两个部分单独工作,但组合并没有给我想要的输出
最佳答案
有很多方法可以解决这个问题。在 data.table 中执行此操作的一种绝妙方法:
test<-data.frame(A=c("aa","be","cg","dh"),B=c("i","i","i","i"))
library(data.table)
test = as.data.table(test)
test[grepl("e",A),B := "yes"]
或在 dplyr 中:
test<-data.frame(A=c("aa","be","cg","dh"),B=c("i","i","i","i"))
library(dplyr)
test = tbl_df(test)
test %>% mutate(B = ifelse(grepl("e",A),"yes",B))
关于仅当满足其他列中的条件时才替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213720/