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



假设数据帧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"))

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

尝试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

Usestr_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("*"))))

与产出

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

注意:fixed被用作pattern默认使用regex模式,*是一个元字符,用于指定其前面的零或多个字符。转义(\)或使用fixed(更快)


或者使用base R

dat$anyTRUE <-  Reduce(`|`, lapply(dat, grepl, pattern = "*", fixed = TRUE))

这是unite

的另一种方法
library(dplyr)
library(tidyr)
library(stringr)
dat %>% 
unite(check, remove = FALSE) %>% 
mutate(check = str_detect(check, '\*')) 
check  var1 var2 var3
1 FALSE  0.12 0.12 0.12
2 FALSE  0.12 0.12 0.12
3  TRUE 0.12* 0.12 0.12

最新更新