R 如何根据列组的平均值对数据帧重新排序

R 如何根据列组的平均值对数据帧重新排序,r,dataframe,R,Dataframe,我试图根据与列ID关联的中值对数据帧重新排序 我有一个数据框,其中有一列ID和两列值 ID <- c("a","a","a","b","b","b","c","c","c","c") alpha <- c(3,4,5,9,11,13,1,1,1,0) beta <- c(2,3,4,3,4,5,4,5,6,7) df <- data.frame(ID,alpha,beta) ID alpha beta 1 a 3 2 2 a 4

我试图根据与列ID关联的中值对数据帧重新排序

我有一个数据框,其中有一列ID和两列值

ID <- c("a","a","a","b","b","b","c","c","c","c")
alpha <- c(3,4,5,9,11,13,1,1,1,0)
beta <- c(2,3,4,3,4,5,4,5,6,7)
df <- data.frame(ID,alpha,beta)

   ID alpha beta
1   a     3    2
2   a     4    3
3   a     5    4
4   b     9    3
5   b    11    4
6   b    13    5
7   c     1    4
8   c     1    5
9   c     1    6
10  c     0    7
这是不成功的:

df[reorder(df$ID, df$alpha, FUN = mean),]
试一试

下面是一个使用data.table的选项

或者我们可以用R基的平均值来得到平均值,然后按顺序排列


你很接近,但混淆了两个想法。重新排序重新排序因子的级别,如果您希望排序仅保持在数据帧的行顺序之外,那么这样做很好。我会做df$ID=reorderdf$ID,df$alpha,FUN=mean。然后,您可以按该列对数据帧进行排序:df[orderdf$ID,]@coffeinjunky很好,但我仍然没有足够的积分来进行投票;
df[reorder(df$ID, df$alpha, FUN = mean),]
library(dplyr)
df %>% group_by(ID) %>% mutate(m = mean(alpha)) %>% arrange(desc(m)) %>% select(-m)
# A tibble: 10 x 3
# Groups:   ID [3]
       ID alpha  beta
   <fctr> <dbl> <dbl>
 1      b     9     3
 2      b    11     4
 3      b    13     5
 4      a     3     2
 5      a     4     3
 6      a     5     4
 7      c     1     4
 8      c     1     5
 9      c     1     6
10      c     0     7
library(data.table)
setDT(df)[df[, mean(alpha), ID][order(-V1), .(ID)], on = .(ID)]
#    ID alpha beta
#1:  b     9    3
#2:  b    11    4
#3:  b    13    5
#4:  a     3    2
#5:  a     4    3
#6:  a     5    4
#7:  c     1    4
#8:  c     1    5
#9:  c     1    6
#10: c     0    7
df[with(df, order(-ave(alpha, ID))),]