在数据框列值上使用 str_detect

Using str_detect on data frame column values

我有一个包含字段 'folno' 的数据框 'fol_all'。我有一个名为 string_detect 的列表,其中包含我想在 fol_all 中标记的字符串列表,如果它们存在于 folno 中。

folno <- c('123denied', 'attached_as_test', 'dept_224', 'bulked_up', 'wsd2273')
fol_all <- data.frame(folno)

string_detect <- c('denied', 'attach', 'bulk')

folno <- folno %>% 
  mutate(folno_flag = case_when(str_detect(folno, string_detect)) == T ~ 1, T == 0)

在此示例中,第 1、2 和 4 行 return 为 1,其余为 0。

我收到以下错误 - 请帮忙。

Error in UseMethod("mutate") : 
  no applicable method for 'mutate' applied to an object of class "character"

您应该首先创建要应用于该列的 regex-pattern,例如

 string_detect <- paste(c('denied', 'attach', 'bulk'), collapse = "|")

然后你需要调整你的case_when代码:

folno <- fol_all %>% 
  mutate(folno_flag = case_when(
    str_detect(folno, string_detect) ~ 1, 
    TRUE ~ 0 ))

结果:

             folno folno_flag
1        123denied          1
2 attached_as_test          1
3         dept_224          0
4        bulked_up          1
5          wsd2273          0

您不需要 str_detect(folno, string_detect)) == T,因为该语句基本上是说,如果 str_detect(folno, string_detect)) 的计算结果为 True,则为 1,否则为 0。

完整代码:

folno <- c('123denied', 'attached_as_test', 'dept_224', 'bulked_up', 'wsd2273')
fol_all <- data.frame(folno)

string_detect <- paste(c('denied', 'attach', 'bulk'), collapse = "|")

fol_all %>% 
  mutate(folno_flag = case_when(
    str_detect(folno, string_detect) ~ 1, 
    TRUE ~ 0 ))