Я хочу создать несколько переменных, которые агрегируют различные подмножества набора данных. Для примера, иллюстрирующего, что у вас есть следующие данные:Как создать несколько новых столбцов с javascript.table в разных подмножествах
DT = data.table(Group1 = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4),
Group2 = c(1,1,1,2,2,1,1,2,2,2,1,1,1,1,2,1,1,2,2,2),
Var1 = c(1,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0))
Я хочу найти несколько средних значений переменной Var1
. Я хочу знать:
mean(Var1)
сгруппирован поGroup1
mean(Var1)
только для тех, кто сGroup2 == 1
, сгруппированным поGroup1
mean(Var1)
только для тех, кто сGroup2 == 2
, сгруппированным поGroup1
Или, в data.table parlance,
DT[, mean(Var1), by=Group1]
DT[Group2==1, mean(Var1), by=Group1]
DT[Group2==2, mean(Var1), by=Group1]
Очевидно, что вычисление любого из них очень просто. Но я не могу найти хороший способ рассчитать все три из них, так как они используют разные подмножества в i
. Решение, которое я использовал до сих пор, генерирует их индивидуально, а затем объединяет их в единую таблицу.
DT_all <- DT[, .(avgVar1_all = mean(Var1)), by = Group1]
DT_1 <- DT[Group2 == 1, .(avgVar1_1 = mean(Var1)), by = Group1]
DT_2 <- DT[Group2 == 2, .(avgVar1_2 = mean(Var1)), by = Group1]
group_info <- merge(DT_all, DT_1, by = "Group1")
group_info <- merge(group_info, DT_2, by = "Group1")
group_info
# Group1 avgVar1_all avgVar1_1 avgVar1_2
# 1: 1 0.4 0.6666667 0.0000000
# 2: 2 0.6 1.0000000 0.3333333
# 3: 3 0.2 0.2500000 0.0000000
# 4: 4 0.0 0.0000000 0.0000000
Есть ли более элегантный метод, который я мог бы использовать?
Это делает трюк, хотя не Подменю .sd в целом одобряется, для исполнения? Или это просто взятие подмножества столбцов из .SD? –
@ConnorJ - Я далек от авторитета по этому вопросу, но я думаю, что подмножество '.SD' было оптимизировано очень сильно, поскольку это было проблемой. Счастлив, что Арун или Мэтт, если я ошибаюсь, похлопал себя по голове. – thelatemail
@ConnorJ - теперь, когда я просматриваю некоторые детали, возможно, вы правы, и это не идеально - https://github.com/Rdatatable/data.table/issues/735 – thelatemail