我认为@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.
这里有线索。您可以使用exclude="" 将分组变量转换为factor,这将确保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