R - 测试多列数据帧的哪些行包含关键字

Mic*_*udl 5 boolean r dplyr

假设一个dat带有 p 值的数据框。

dat <- data.frame(var1 = c("0.12", "0.12", "0.12*"), 
                  var2 = c("0.12", "0.12", "0.12"), 
                  var3 = c("0.12", "0.12", "0.12"))
Run Code Online (Sandbox Code Playgroud)

如何测试哪些行包含星号?

尝试1:

dat %>%
+ mutate(anyTRUE = if_any(.rows = contains('\\*'), isTRUE))
   var1 var2 var3 anyTRUE
1  0.12 0.12 0.12    TRUE
2  0.12 0.12 0.12    TRUE
3 0.12* 0.12 0.12    TRUE
Run Code Online (Sandbox Code Playgroud)

akr*_*run 4

使用str_detect/grepl-contains/matches/starts_with/ends_with全部select-helpers用于根据模式匹配和选择列名。在这里,我们想要检测具有模式的行。

library(stringr)
library(dplyr)
dat <- dat %>%
    mutate(anyTRUE = if_any(everything(), ~ str_detect(.x, fixed("*"))))
Run Code Online (Sandbox Code Playgroud)

-输出

dat
   var1 var2 var3 anyTRUE
1  0.12 0.12 0.12   FALSE
2  0.12 0.12 0.12   FALSE
3 0.12* 0.12 0.12    TRUE
Run Code Online (Sandbox Code Playgroud)

注意:fixed用作pattern默认使用regex模式,并且*是一个元字符,用于指定其前面的零个或多个字符。要么 escape ( \\) 要么 use fixed(这会更快)


或者使用base R

dat$anyTRUE <-  Reduce(`|`, lapply(dat, grepl, pattern = "*", fixed = TRUE))
Run Code Online (Sandbox Code Playgroud)