【发布时间】:2015-04-16 19:01:44
【问题描述】:
有时我需要计算data.table 中一列或另一列中非NA 元素的数量。最好的data.table-tailored 方式是什么?
为了具体起见,让我们使用这个:
DT <- data.table(id = sample(100, size = 1e6, replace = TRUE),
var = sample(c(1, 0, NA), size = 1e6, replace = TRUE), key = "id")
我想到的第一件事是这样的:
DT[!is.na(var), N := .N, by = id]
但这有一个不幸的缺点,即N 不会被分配到缺少var 的任何行,即DT[is.na(var), N] = NA。
所以我通过附加来解决这个问题:
DT[!is.na(var), N:= .N, by = id][ , N := max(N, na.rm = TRUE), by = id] #OPTION 1
但是,我不确定这是最好的方法;我想到的另一种选择,以及thisdata.frames 的类似问题的建议是:
DT[ , N := length(var[!is.na(var)]), by = id] # OPTION 2
和
DT[ , N := sum(!is.na(var)), by = id] # OPTION 3
比较这些计算时间(平均超过 100 次试验),最后一个似乎是最快的:
OPTION 1 | OPTION 2 | OPTION 3
.075 | .065 | .043
有人知道data.table 的更快方法吗?
【问题讨论】:
标签: r data.table