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

R语言按日期分组统计指定字段有效计数实现方法

R实现按日期分组统计两列非缺失值计数

核心思路

忽略Rej、Old两列,提取App、Proc中所有非NA的日期值,按日期维度分组后分别统计两个字段的有效记录数,最终输出包含Date、App、Proc三列的汇总表即可。


常用实现代码

1. dplyr+tidyr 写法(可读性最高,适合常规数据量场景)

library(dplyr)
library(tidyr)

DFdesired <- DF1 %>%
  select(App, Proc) %>%
  pivot_longer(everything(), names_to = "col", values_to = "Date") %>%
  filter(!is.na(Date)) %>%
  count(Date, col) %>%
  pivot_wider(names_from = col, values_from = n, values_fill = 0)

运行后直接得到符合结构要求的结果:Date列存储去重后的日期值,App、Proc列分别存储对应日期下该字段的非NA有效记录数。

2. data.table 写法(性能最优,适合百万行以上大数据量场景)

library(data.table)
setDT(DF1)

# 分别统计两个字段的分日期计数
app_stat <- DF1[!is.na(App), .(App = .N), keyby = .(Date = App)]
proc_stat <- DF1[!is.na(Proc), .(Proc = .N), keyby = .(Date = Proc)]

# 全连接合并结果,无计数的位置补0
DFdesired <- merge(app_stat, proc_stat, all = TRUE)
DFdesired[is.na(DFdesired)] <- 0

3. 基础R写法(无需安装加载第三方包)

# 计算两列非NA值的频次
app_count <- table(DF1$App[!is.na(DF1$App)])
proc_count <- table(DF1$Proc[!is.na(DF1$Proc)])

# 提取所有出现过的日期全集
all_date <- sort(unique(c(as.character(names(app_count)), as.character(names(proc_count)))))

# 对齐计数组装结果
DFdesired <- data.frame(
  Date = as.Date(all_date),
  App = as.integer(app_count[match(all_date, names(app_count))]),
  Proc = as.integer(proc_count[match(all_date, names(proc_count))])
)
DFdesired[is.na(DFdesired)] <- 0

提示:如果App、Proc列存储的是字符串格式的日期,先执行以下代码统一转为标准日期类型再统计,避免分组匹配错误:

DF1[c("App", "Proc")] <- lapply(DF1[c("App", "Proc")], as.Date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:18:20