R语言:检测多列数据框中包含星号的行
检测数据框中包含星号的行
假设有一个存储p值的数据框dat,创建代码如下:
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"))
需要检测该数据框中哪些行包含星号。以下是尝试的错误代码及结果:
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
问题分析
这段代码的核心错误在于参数使用不当:.rows参数是用来指定要操作的行范围,而非用来匹配单元格内容;同时isTRUE是判断逻辑值的函数,无法识别字符串中的星号,导致所有行都返回TRUE。
正确解法
使用正则匹配函数grepl配合if_any,就能准确检测每行是否包含星号:
library(dplyr) dat %>% mutate(has_asterisk = if_any(everything(), ~ grepl("\\*", .x)))
运行结果:
var1 var2 var3 has_asterisk 1 0.12 0.12 0.12 FALSE 2 0.12 0.12 0.12 FALSE 3 0.12* 0.12 0.12 TRUE
代码解释
everything():指定对所有列进行检查,若只需检查特定列,可替换为列名(如var1)grepl("\\*", .x):用正则表达式匹配单元格中的星号(星号是正则特殊字符,需用双反斜杠转义)if_any:只要当前行任意一列满足星号匹配条件,就返回TRUE
内容的提问来源于stack exchange,提问作者Michael Gruenstaeudl
相关产品推荐
相关产品推荐

