我正在尝试使用 mutate 和 grepl 根据其他 2 列中的特定条件修改列。通过匹配其中一列中的特定单词即可满足这些条件之一。这两个条件都必须满足。下面是我想要做的脚本示例的描述:
df <- x %>%
mutate(col3 = ifelse(grepl(c("string1"), col1) & grepl(c("string5|string6|string7"), col2),
"new_string",
col1))
使用 grepl 时,OR (|) 似乎是唯一有效的。我需要这两个条件都成立。因此我需要使用 AND (&) 或类似的东西。
有人可能有一个简单的解决方案吗?
您尝试过使用
case_when
吗?这是另一种方法:
图书馆(dplyr) 库(字符串)
df <- df %>%
mutate(
col3 = case_when(
str_detect(col1, "string1") & str_detect(col2, "string5|string6|string7", perl = TRUE) ~ "new_string",
TRUE ~ col1
)
)
(注:这是一个临时答案。OP需要提供更多信息。)
只要您拥有的代码与您拥有的数据匹配,它就可以工作。正如Quinten 所建议的那样,如果您提供样本数据和预期输出,这将会很有帮助。但是,要回答如何使用“具有多个条件的 mutate 和 grepl”的问题,字面意思就是答案:
# generate sample data:
df <- data.frame(
col1 = paste0("string", 1:2),
col2 = paste0("string", 1:10))
df %>%
mutate(col3 = ifelse(grepl(c("string1"), col1) & grepl(c("string5|string6|string7"), col2),
"new_string",
col1))
输出:
col1 col2 col3
1 string1 string1 string1
2 string2 string2 string2
3 string1 string3 string1
4 string2 string4 string2
5 string1 string5 new_string
6 string2 string6 string2
7 string1 string7 new_string
8 string2 string8 string2
9 string1 string9 string1
10 string2 string10 string2