假设一个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)
使用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)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |