如何在data.table中按组计数时统计指定列的非NA观测值?
用data.table按组统计指定列的非NA观测数
直接把你原来用的.N换成sum(!is.na(D))就行,这是最直接高效的写法:
先构造示例数据:
library(data.table) dt <- data.table( cat = c("X", "X", "Y", "Y"), D = c(1, 2, 3, NA) )
执行分组统计:
dt[, .(observations = sum(!is.na(D))), by = cat]
运行结果里,cat Y组的observations就是1,完全符合你的需求。
原理很简单:!is.na(D)会把D列里的非NA值转换成逻辑值TRUE(对应数值1),NA转换成FALSE(对应数值0),用sum求和就得到了每组里D列非NA的有效观测数。
如果你偏好另一种写法,也可以先过滤NA再统计,结果一致但效率稍低:
dt[!is.na(D), .(observations = .N), by = cat]
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

