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

R语言如何筛选数字后缀小于指定值的dataframe变量

解决方法

你可以结合tidyverse的列选择语法和正则匹配实现自动筛选,以下是两种适配不同场景的方案:

通用方案(适配所有后缀位数,不会误匹配)

核心逻辑是提取列名的数字后缀做数值判断,不管后缀是1位还是多位都能准确识别:

1. 筛选符合条件的列
library(tidyverse)

df <- df %>%
  select(
    id,
    where(~ {
      # 先过滤非tot_开头+数字后缀的列
      if (!str_detect(cur_column(), "^tot_\\d+$")) return(FALSE)
      # 提取后缀转数值做判断
      suffix <- as.numeric(str_extract(cur_column(), "\\d+$"))
      suffix < 3
    })
  )
2. 对符合条件的列做运算(比如行求和)

把上述判断逻辑放到across()中即可:

df <- df %>%
  mutate(
    sumVar = rowSums(
      across(
        where(~ {
          if (!str_detect(cur_column(), "^tot_\\d+$")) return(FALSE)
          suffix <- as.numeric(str_extract(cur_column(), "\\d+$"))
          suffix < 3
        })
      )
    )
  )

简易方案(仅适用于后缀为1位数字的场景)

如果你的列后缀都是个位数,也可以直接用正则匹配简化写法:

# 筛选列
df <- df %>% select(id, matches("^tot_[12]$"))

# 行求和
df <- df %>% mutate(sumVar = rowSums(across(matches("^tot_[12]$"))))

通用方案适配性更强,哪怕后续列名出现tot_10、tot_0这类格式也能正常筛选,更推荐使用。

内容的提问来源于stack exchange,提问作者user2246905

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:18:03