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
相关产品推荐
相关产品推荐

