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

在R语言中按日期分组统计数据条数的方法问询

按日期重组并统计每日数据条数的解决方案

针对你提供的这份R数据集(存在重复日期、部分日期无记录,还有缺失的date值),下面给你两种实用的解决思路,你可以根据自己的习惯选择:

第一步:先把日期转成标准格式

原数据里的date列是字符串(比如01/18/2017),首先得把它转成R能识别的日期类型,同时保留缺失值的标记:

# 转换日期格式,注意原格式是「月/日/年」
z$date <- as.Date(z$date, format = "%m/%d/%Y")

转换后,原来空的date会变成NA,方便后续统计。


方案一:用原生base R快速统计

如果不想加载额外的包,直接用table()就能搞定,它会自动把缺失日期的记录也统计进去:

# 统计每日条数,包含缺失日期的记录
daily_counts <- table(z$date, useNA = "ifany")

# 转成数据框,看起来更直观
as.data.frame(daily_counts)

输出结果会像这样(包含所有日期和缺失组的计数):

Var1 Freq

1 1994-11-19 1
2 2013-11-15 1
3 2013-11-24 1
4 2013-12-28 1
5 2013-12-31 1
6 1
7 2014-01-03 1
8 2014-01-08 1
9 2017-01-18 1
10 2017-01-22 1


方案二:用dplyr(tidyverse)更灵活地统计

如果你平时常用tidyverse工具链,用dplyr的语法会更清晰,也方便后续做更多数据处理:

先确保加载dplyr包:

library(dplyr)

然后分组统计每日条数:

daily_counts <- z %>%
  group_by(date) %>%
  summarise(daily_count = n(), .groups = "drop")

# 查看结果,NA组会自动保留
print(daily_counts)

如果你的数据里有同一日期的多条记录,这个代码会自动累加计数,比如某日期有3条记录,daily_count就会显示3。


额外需求:补全所有日期(包括无记录的日子)

要是你想把数据时间范围内的每一天都列出来,哪怕当天没有记录也显示0,可以这么做:

# 生成从最早到最晚的连续日期序列
date_sequence <- seq(min(z$date, na.rm = TRUE), max(z$date, na.rm = TRUE), by = "day")

# 转成数据框
all_dates <- data.frame(date = date_sequence)

# 左连接统计结果,把无记录日期的计数补为0
complete_daily_counts <- all_dates %>%
  left_join(daily_counts, by = "date") %>%
  mutate(daily_count = replace_na(daily_count, 0))

print(complete_daily_counts)

这样就能得到连续的日期统计,没有数据的日期会显示daily_count = 0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:37