Мне интересно, как я могу обеспечить, чтобы я включал все взаимодействия факторов при использовании агрегата, даже если они не отображаются в данном наборе данных.R - агрегатная функция, обеспечивающая взаимодействие всех уровней факторов
dff <- data.frame(a=as.factor(c(rep(1,3), rep(2,4), rep(3,3))),
b=as.factor(c(rep("A", 4), rep("B",6))),
c=sample(100,10))
levels(dff$b) <- c(levels(dff$b), "C")
levels(dff$a) <- c(levels(dff$a), 10)
dff$b
#[1] A A A A B B B B B B
#Levels: A B C
dff$a
#[1] 1 1 1 2 2 2 2 3 3 3
#Levels: 1 2 3 10
aggregate(c~a+b, dff, sum)
# a b c
#1 1 A 233
#2 2 A 78
#3 2 B 212
#4 3 B 73
что я хочу
a b c
1 1 A 233
2 1 B 0
3 1 C 0
4 2 A 78
5 2 B 212
6 2 C 0
7 3 A 0
8 3 B 73
9 3 C 0
10 10 A 0
11 10 B 0
12 10 C 0
Н.А. это тоже хорошо.
Причина, по которой я хочу в этом формате, заключается в том, что мне нужно взаимодействовать с dff $ c с результатами других наборов данных, и они могут иметь разную длину, если не все уровни факторов учитываются. Я пытаюсь избежать слияния и вместо этого использовать векторный расчет.
Заранее спасибо.
использовать' complete' из "tidyr" или '' expand.grid' + merge' в базовой R? Вы хотите решить эту проблему или просто спросить в целом? – A5C1D2H2I1M1N2O1R2T1
Я спрашиваю, потому что для этой конкретной проблемы вы можете просто использовать 'as.data.frame (xtabs (...))', как в 'as.data.frame (xtabs (c ~ a + b, dff))' , – A5C1D2H2I1M1N2O1R2T1
При создании примера со случайным процессом добавьте '? Set.seed' для воспроизводимости. –