【发布时间】:2019-01-15 11:45:11
【问题描述】:
假设我们有这个玩具示例:
prueba <- data.table(aa=1:7,bb=c(1,2,NA, NA, 3,1,1),
cc=c(1,2,NA, NA, 3,1,1) , YEAR=c(1,1,1,2,2,2,2))
aa bb cc YEAR
1: 1 1 1 1
2: 2 2 2 1
3: 3 NA NA 1
4: 4 NA NA 2
5: 5 3 3 2
6: 6 1 1 2
7: 7 1 1 2
我想创建一个包含 YEAR 值的表。 在这个简单的示例中,我将只询问我有多少丢失和未丢失的表格。
这是一种丑陋的做法,手动指定所有内容:
prueba[,.(sum(is.na(.SD)),sum(!is.na(.SD))), by=YEAR]
虽然它不会自动标记我们看到的新列,但它说我在第 1 年有 2 个缺失值和 7 个非缺失值,并且...
YEAR V1 V2
1: 1 2 7
2: 2 2 10
它有效,但我真正想要的是能够使用 table() 或一些 data.table 等效命令,而不是手动指定每个术语。如果我有很多,或者我们事先不知道它们,那会更有效率。
我试过了:
prueba[,table(is.na(.SD)), by=YEAR]
但它不起作用,我明白了:
YEAR V1
1: 1 7
2: 1 2
3: 2 10
4: 2 2
如何获得与上述相同的格式?
我不幸地尝试过使用 as.datable、unlist、lapply 和其他东西。我认为有些人使用 dcast,但我不知道如何在这里使用它。
有没有简单的方法来做到这一点?
我真正的桌子很大。
使用列名而不是 .SD 会更好吗?
【问题讨论】:
标签: r data.table crosstab