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

如何统计data.frame中Class各取值在不同Date的出现次数(含0值)

这里有两种实用的方法来生成包含所有class-date组合(包括未出现时的0值)的计数表,刚好匹配你要的输出格式:

方法1:使用tidyverse工具链(推荐,代码更直观)

首先确保你已经安装并加载了tidyverse包(它包含了dplyr和tidyr,处理这类数据非常方便):

# 安装包(如果还没装的话)
install.packages("tidyverse")
library(tidyverse)

# 你的原始数据框
df <- data.frame(class = c("a","b","a","a"), date = c(2010,2009,2010,2009))

# 生成目标输出
result <- df %>%
  # 先扩展出所有class和date的可能组合
  expand(class = unique(class), date = unique(date)) %>%
  # 左连接原数据的计数结果
  left_join(df %>% count(class, date, name = "volume"), by = c("class", "date")) %>%
  # 把缺失的volume填充为0
  mutate(volume = replace_na(volume, 0))

# 查看结果
print(result)

运行后你会得到完全符合预期的输出:

class date volume
1     a 2009      1
2     a 2010      2
3     b 2009      1
4     b 2010      0

方法2:使用Base R(无需额外安装包)

如果你不想加载第三方包,用base R的table()函数也能实现:

# 你的原始数据框
df <- data.frame(class = c("a","b","a","a"), date = c(2010,2009,2010,2009))

# 生成交叉表并转换为数据框
tab <- as.data.frame(table(df$class, df$date))
# 重命名列名
colnames(tab) <- c("class", "date", "volume")

# 查看结果
print(tab)

这个方法会自动生成所有组合,未出现的组合计数就是0,输出和上面的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:29:07