我试图根据与列ID关联的中值重新排序数据帧。
我有一个包含I列和2列值的dataframe。
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我希望重新排序此数据格式,以便根据alpha列中关联值的递减方式对列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[reorder(df$ID, df$alpha, FUN = mean),]发布于 2017-09-01 22:17:39
试一试
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发布于 2017-09-02 01:19:26
下面是一个使用data.table的选项
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或者我们可以使用来自base R的base R来获取mean,然后使用order
df[with(df, order(-ave(alpha, ID))),]https://stackoverflow.com/questions/46008444
复制相似问题