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

如何在R语言中按条件统计DataFrame的行数?

在R中按条件统计DataFrame行数的方法

没问题呀,新手问题完全不用客气~下面我给你介绍几种在R里按条件统计数据框行数的常用方法,结合你的数据来举例,一看就懂:

第一步:先构造你的测试数据

首先我们把你提供的数据转换成R可直接运行的数据框,方便后续测试:

df <- data.frame(
  order_id = c(1,1,1,36,36,36,36,38,38,38,38,96,96,96),
  department_id = c(4,15,16,4,7,16,20,1,4,13,19,1,4,20),
  department = c("produce", "canned goods", "dairy eggs", "produce", "beverages", "dairy eggs", "deli", "frozen", "produce", "pantry", "snacks", "frozen", "produce", "deli"),
  n = c(4,1,3,3,1,3,1,1,6,1,1,2,4,1)
)

方法一:基础R实现(无需额外包)

1. 使用nrow() + subset()

这种方法逻辑直观,适合初学者理解:

  • 单条件统计:比如统计order_id为1的行数
nrow(subset(df, order_id == 1))  # 结果是3
  • 多条件统计:比如统计department是"produce"且n大于3的行数
nrow(subset(df, department == "produce" & n > 3))  # 结果是3(order_id 1、38、96的produce行)

2. 使用逻辑索引求和(更高效)

R中逻辑值TRUE会被视为1,FALSE视为0,用sum()可以直接统计符合条件的行数,大数据框下比subset()更快:

  • 单条件:统计department_id为4的行数
sum(df$department_id == 4)  # 结果是4
  • 多条件:统计order_id是36且department不是"produce"的行数
sum(df$order_id == 36 & df$department != "produce")  # 结果是3

方法二:tidyverse/dplyr实现(更简洁的管道风格)

如果你习惯用tidyverse生态,dplyr的语法会更流畅,先确保安装并加载包:

install.packages("dplyr")  # 首次使用需安装
library(dplyr)

1. 单条件/多条件统计

用filter()筛选符合条件的行,再用tally()统计行数:

  • 统计n等于1的行数
df %>% 
  filter(n == 1) %>% 
  tally()  # 结果是7
  • 多条件:统计order_id为96且department是"frozen"或"deli"的行数
df %>% 
  filter(order_id == 96, department %in% c("frozen", "deli")) %>% 
  tally()  # 结果是2

2. 分组统计行数

如果需要按某个字段分组统计每组的行数(比如每个订单下的品类数量),用group_by() + tally():

df %>% 
  group_by(order_id) %>% 
  tally()

运行后会得到每个order_id对应的行数,比如order_id=1有3行,order_id=36有4行等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:13:00