仅当满足其他列中的条件时才替换字符串

标签 r replace conditional-statements gsub

我有一个数据框

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/

相关文章:

r - 在Mac(iMac OSX)终端中远程运行脚本(r脚本)到其他计算机

r - 根据其他数据向数据添加新列

java - 为什么我应该总是使用 ||而不是 |和 && 而不是 &?

python - 如何在 python 中使用另一个列表上的一个列表运行模条件

Python:多线程还是循环?

json - 用 jsonlite 或其他东西从 R 编码一个 JSON 表达式

r - data.table 余额变化的复利计算

python - 查找并替换文件python中的多个单词

jquery ,获取带有类名的 div 并更改文本?

python - 如何在python3中用无字符替换 `c2a0`?