R 如何根据列组的平均值对数据帧重新排序
我试图根据与列ID关联的中值对数据帧重新排序 我有一个数据框,其中有一列ID和两列值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 <- 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))),]