在R中不硬编码索引 对含指定字符串+数字的目标列执行行求和
实现方案
核心思路
用正则表达式精准匹配符合规则的列名,避免误匹配:
- 用
^act\\d匹配开头为act、后紧跟数字的列,完全避开active、latency.to.first.active这类含act但不符合规则的列 - 同理用
^inact\\d匹配inact类列,^rew\\d匹配rew类列 - 直接用
rowSums对列子集计算行和,替代低效的逐行循环
完整代码
# 计算active总和:匹配所有act开头后跟数字的列 dat$active <- rowSums(dat[, grepl("^act\\d", colnames(dat))], na.rm = TRUE) # 计算inactive总和:匹配所有inact开头后跟数字的列 dat$inactive <- rowSums(dat[, grepl("^inact\\d", colnames(dat))], na.rm = TRUE) # 计算reward总和:匹配所有rew开头后跟数字的列 dat$reward <- rowSums(dat[, grepl("^rew\\d", colnames(dat))], na.rm = TRUE)
说明
- 代码无需硬编码列索引,只要列名命名规则不变,列数增减、顺序调整都能自动适配
- 加
na.rm = TRUE参数可避免行内存在缺失值时返回NA的问题,不需要可以删掉 - 向量化操作比原逐行循环效率高很多,数据量越大优势越明显
内容的提问来源于stack exchange,提问作者jc2525
相关产品推荐
相关产品推荐

