You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:20:33