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

基于两列统计某列非空值频次:data.table替代dplyr实现方案

使用data.table实现按Ticker和Year统计Value非空值频次

当然有!data.table在处理大规模数据集时的性能表现通常优于dplyr,而且语法简洁直接,很适合这类分组统计场景。

具体实现步骤:

  1. 先安装并加载data.table包:
install.packages("data.table")
library(data.table)
  1. 转换数据格式(如果你的数据还是data.frame类型):

    • 如果你想原地转换(不复制数据,节省内存),用setDT():
      setDT(data)
      
    • 如果你不想修改原数据,生成副本用as.data.table():
      dt <- as.data.table(data)
      
  2. 执行分组统计:

# 假设数据已经是data.table格式,直接运行
dt[, .(count = sum(!is.na(Value))), by = .(Ticker, Year)]

代码解释:

  • by = .(Ticker, Year):指定按Ticker和Year两列进行分组
  • .():用来定义结果集中的列,这里我们创建名为count的统计列
  • sum(!is.na(Value)):直接统计每组中Value非空值的数量,相比length(Value[!is.na(Value)]),这种写法更高效,因为它不需要先创建子集再计算长度,而是直接对布尔向量求和(TRUE会被当作1,FALSE当作0)

如果你的数据量很大,会明显感受到data.table的速度优势,它的底层优化避免了很多不必要的内存开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:11:58