我注意到aggregate()
似乎返回按分组列排序的结果。这是保证吗?这可以依赖于周围的逻辑吗?
几个例子:
set.seed(1); df <- data.frame(group=sample(letters[1:3],10,replace=T),value=1:10);
aggregate(value~group,df,sum);
## group value
## 1 a 16
## 2 b 22
## 3 c 17
并且有两个组(请注意,第二组先排序,然后是第一组打破平局):
set.seed(1); df <- data.frame(group1=sample(letters[1:3],10,replace=T),group2=sample(letters[4:6],10,replace=T),value=1:10);
aggregate(value~group1+group2,df,sum);
## group1 group2 value
## 1 a d 1
## 2 b d 2
## 3 b e 9
## 4 c e 10
## 5 a f 15
## 6 b f 11
## 7 c f 7
注意:我问这个问题是因为我刚刚找到了 Aggregating while merging two dataframes in R 的答案。至少在撰写本文时的当前形式,它依赖于 aggregate()
返回按分组列排序的结果。
最佳答案
是的,只要您了解因子按整数键进行的自然排序即可。您可以在代码中看到这一点:
y <- as.data.frame(by, stringsAsFactors = FALSE)
... # y becomes the "integerized" dataframe of index vectors
grp <- rank(do.call(paste, c(lapply(rev(y), ident), list(sep = "."))),
ties.method = "min")
y <- y[match(sort(unique(grp)), grp, 0L), , drop = FALSE]
...
关于r - aggregate() 是否保证结果将按分组列排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30541130/