R语言中如何按行统计列名前缀为q5且值等于10的列数
实现行内指定前缀列的10值计数
tidyverse 实现(推荐)
通过内置列选择器自动匹配目标列,无需手动枚举列名,可直接适配包含q1、q2、q3等多前缀列的大尺寸数据框:
library(dplyr) demo <- demo %>% mutate( tens = rowSums(across(starts_with("q5")) == 10, na.rm = TRUE) )
starts_with("q5")为tidyselect内置列选择器,自动筛选所有列名以q5开头的列,不受后续列后缀(a/b/c等)影响- 对选中的列逐元素判断是否等于10,生成由TRUE/FALSE组成的逻辑矩阵(逻辑值默认对应数值1/0)
rowSums按行汇总逻辑值,搭配na.rm = TRUE自动排除缺失值,不会将NA误判为10,计算结果与示例预期完全匹配。该写法为向量化运算,大表运行效率远高于逐行循环的实现方式。
R 基础包实现
不依赖第三方包的等效写法:
# 正则匹配筛选所有q5开头的列 q5_cols <- grepl("^q5", names(demo)) # 逐行统计等于10的数量,新增tens列 demo$tens <- rowSums(demo[, q5_cols] == 10, na.rm = TRUE)
- 通过
grepl正则匹配列名,精准定位所有q5开头的列 - 后续统计逻辑与tidy版完全一致,自动忽略缺失值完成计数。
内容的提问来源于stack exchange,提问作者iod
相关产品推荐
相关产品推荐

