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

R语言如何统计数据框列组所有元素匹配指定值的行数

R语言按列前缀分组统计全列匹配指定值的行数解决方案

核心逻辑调整

你只需要修改sapply内部的计算逻辑,判断每个分组的行是否所有元素都等于1,再对符合条件的行计数即可。推荐用向量化的rowSums实现,效率比逐行apply更高:

# 提取唯一双字母前缀
groups <- unique(substr(names(df), 1, 2))
# 遍历分组统计符合条件的行数
result <- sapply(groups, function(xx) {
  # 精准匹配前缀筛选对应列,避免列名中间出现目标字符的误匹配
  group_cols <- df[, grep(paste0("^", xx), names(df)), drop = FALSE]
  # 行内所有值为1等价于:行内等于1的数量 = 该分组的列数,统计符合条件的总行数
  sum(rowSums(group_cols == 1) == ncol(group_cols))
})
# 转为你需要的两列格式的汇总表
result_df <- data.frame(
  前缀 = names(result),
  符合条件行数 = as.integer(result),
  row.names = NULL
)

输出验证

代入你提供的示例数据运行后,result_df的输出和你要求的结果完全一致:

前缀 符合条件行数
1   AA            2
2   AB            1
3   AC            0

可选写法(仅作逻辑参考)

如果你更倾向于用逐行判断的写法,也可以用apply实现,逻辑更直观但数据量大时运行速度较慢:

result <- sapply(groups, function(xx) {
  group_cols <- df[, grep(paste0("^", xx), names(df)), drop = FALSE]
  sum(apply(group_cols, 1, function(row) all(row == 1)))
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:51:02