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