Скажем, у нас есть этот игрушечный пример:
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
Я хочу создать таблицу со значениями чего-либо по ГОДУ.
В этом простом примере я просто попрошу таблицу, в которой указано, сколько у меня пропавших и не пропущенных.
Это ужасный способ сделать это, указав все вручную:
prueba[,.(sum(is.na(.SD)),sum(!is.na(.SD))), by=YEAR]
Хотя он не помечает автоматически новые столбцы, которые мы видим, он говорит, что у меня есть 2 пропущенных и 7 не пропущенных значений за год 1, и ...
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?