Следующая проблема мешает мне так далеко от очень гибкого использования агрегатов data.table.Гибкое смешивание множественных агрегатов в таблице данных для разных комбинаций столбцов
Пример:
library(data.table)
set.seed(1)
DT <- data.table(C1=c("a","b","b"),
C2=round(rnorm(4),4),
C3=1:12,
C4=9:12)
sum_cols <- c("C2","C3")
#I want to apply a custom aggregation over multiple columns
DT[,lapply(.SD,sum),by=C1,.SDcols=sum_cols]
### Part 1 of question ###
#but what if I want to add another aggregation, e.g. count
DT[,.N,by=C1]
#this is not working as intended (creates 4 rows instead of 2 and doesnt contain sum_cols)
DT[,.(.N,lapply(.SD,sum)),by=C1,.SDcols=sum_cols]
### Part 2 of question ###
# or another function for another set of colums and adding a prefix to keep them appart?
mean_cols <- c("C3","C4")
#intended table structure (with 2 rows again)
C1 sum_C2 sum_C3 mean_C3 mean_C4
Я знаю, что всегда можно объединить различные одиночные результаты агрегации некоторым ключом, но Я уверен, что должно быть правильным, гибкий и простой способ сделать то, что я хотел бы сделать (особенно Часть 2).
Отлично, спасибо - это сделает мою жизнь с dt намного проще и удобнее. Выполнение второго (в данном случае) - я проверю ваши замечания, если у меня возникнут проблемы. Я удивлен, однако, что .SDcols здесь не так полезны ... в общем случае это кажется довольно ограниченным. – katsumi
@katsumi Да, .SDcols - это всего лишь один набор cols за раз, поэтому, если вам нужны несколько (возможно, перекрывающихся) наборов, это будет не так полезно, я думаю. – Frank