【发布时间】:2015-11-11 23:15:48
【问题描述】:
我有一个如下所示的 data.table:
> dt <- data.table(
group1 = c("a", "a", "a", "b", "b", "b", "b"),
group2 = c("x", "x", "y", "y", "z", "z", "z"),
data1 = c(NA, rep(T, 3), rep(F, 2), "sometimes"),
data2 = c("sometimes", rep(F,3), rep(T,2), NA))
> dt
group1 group2 data1 data2
1: a x NA sometimes
2: a x TRUE FALSE
3: a y TRUE FALSE
4: b y TRUE FALSE
5: b z FALSE TRUE
6: b z FALSE TRUE
7: b z sometimes NA
我的目标是找出每个数据列中非 NA 记录的数量,按 group1 和 group2 分组。
group1 group2 data1 data2
1: a x 1 2
3: a y 1 1
4: b y 1 1
5: b z 3 2
我在处理数据集的另一部分时留下了这段代码,它没有 NAs 并且是合乎逻辑的:
dt[
,
lapply(.SD, sum),
by = list(group1, group2),
.SDcols = c("data3", "data4")
]
但它不适用于 NA 值或非逻辑值。
【问题讨论】:
-
lapply()的使用与您在基础 R 中的使用方式没有什么不同。
标签: r data.table