Я думаю, что @Gregor правильно указал, что проблемой может быть группирующая переменная, имеющая NA
. dplyr
обрабатывает NA
в группировке переменных иначе, чем aggregate
.
У нас есть альтернативное решение с aggregate
. Обратите внимание, что документ предполагает, что
`by` a list of grouping elements, each as long as the variables in the data
frame x. The elements are coerced to factors before use.
Вот подсказка. Вы можете преобразовать ваши группирующие переменные в factor
, используя exclude=""
, что обеспечит NA
часть фактора.
set.seed(1)
df <- data.frame(ATTRIBUTE1 = sample(LETTERS[1:3], 10, replace = TRUE),
ATTRIBUTE2 = sample(letters[1:3], 10, replace = TRUE),
AMOUNT = 1:10)
df$ATTRIBUTE2[5] <- NA
aggregate(df["AMOUNT"], by = list(factor(df$ATTRIBUTE1,exclude = ""),
factor(df$ATTRIBUTE2, exclude="")), sum)
# Group.1 Group.2 AMOUNT
# 1 A a 1
# 2 B a 2
# 3 B b 9
# 4 C b 10
# 5 A c 10
# 6 B c 11
# 7 C c 7
# 8 A <NA> 5
Результат, когда группируемые переменные не преобразуются явно в factor
для включения NA
, выглядит следующим образом:
aggregate(df["AMOUNT"], df[c("ATTRIBUTE1", "ATTRIBUTE2")], sum)
# ATTRIBUTE1 ATTRIBUTE2 AMOUNT
# 1 A a 1
# 2 B a 2
# 3 B b 9
# 4 C b 10
# 5 A c 10
# 6 B c 11
# 7 C c 7