在多个条件下使用 mutate 和 grepl

问题描述 投票:0回答:2

我正在尝试使用 mutate 和 grepl 根据其他 2 列中的特定条件修改列。通过匹配其中一列中的特定单词即可满足这些条件之一。这两个条件都必须满足。下面是我想要做的脚本示例的描述:

df <- x %>% 
        mutate(col3 = ifelse(grepl(c("string1"), col1) & grepl(c("string5|string6|string7"), col2), 
                            "new_string",
                             col1))

使用 grepl 时,OR (|) 似乎是唯一有效的。我需要这两个条件都成立。因此我需要使用 AND (&) 或类似的东西。

有人可能有一个简单的解决方案吗?

r conditional-statements grepl mutate
2个回答
0
投票

您尝试过使用

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
    )
  )

0
投票

(注:这是一个临时答案。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
    
© www.soinside.com 2019 - 2024. All rights reserved.