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

在R语言中按多列分组并统计指定值的出现次数

在R中按前三列分组统计第四列"Yes"的次数

嗨,这个需求在R里有好几种实用的实现方式,我给你整理了几个最常用的方案,你可以根据自己的习惯选择:

方法1:使用dplyr包(tidyverse生态,简洁直观)

这是现在R数据分析中最流行的方式,代码可读性很强:

首先确保你安装并加载了dplyr包:

install.packages("dplyr") # 如果没安装的话
library(dplyr)

假设你的数据框叫df,前三列是col1、col2、col3,第四列是col4,那么代码如下:

result_df <- df %>%
  group_by(col1, col2, col3) %>%
  summarize(yes_count = sum(col4 == "Yes", na.rm = TRUE), .groups = "drop")
  • group_by(col1, col2, col3):按前三列完成分组
  • sum(col4 == "Yes"):统计每组中第四列等于"Yes"的次数,na.rm = TRUE是为了处理第四列可能存在的缺失值
  • .groups = "drop":分组后取消分组状态,得到普通的数据框格式

方法2:基础R的aggregate函数(无需额外安装包)

如果你不想加载第三方包,用基础R自带的aggregate函数就能搞定:

result_df <- aggregate(col4 ~ col1 + col2 + col3, data = df, 
                       FUN = function(x) sum(x == "Yes", na.rm = TRUE))
# 可以给结果列重命名更直观
colnames(result_df)[4] <- "yes_count"

方法3:使用data.table包(适合大数据,效率极高)

如果你的数据量很大,data.table的运行速度会比前两种方案快很多:

install.packages("data.table") # 如果没安装的话
library(data.table)

setDT(df) # 将普通数据框转为data.table格式
result_df <- df[, .(yes_count = sum(col4 == "Yes", na.rm = TRUE)), 
                by = .(col1, col2, col3)]

示例测试

你可以用下面的示例数据试试上面的代码,看看结果是否符合预期:

# 构造示例数据框
df <- data.frame(
  col1 = c("A", "A", "B", "B", "A"),
  col2 = c("X", "X", "Y", "Y", "X"),
  col3 = c(1, 1, 2, 2, 1),
  col4 = c("Yes", "No", "Yes", "Yes", "Yes")
)

运行后得到的result_df应该是:

col1col2col3yes_count
AX12
BY22

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:57:32