首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于列组均值重新排序数据帧

如何基于列组均值重新排序数据帧
EN

Stack Overflow用户
提问于 2017-09-01 21:58:25
回答 2查看 797关注 0票数 1

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

我有一个包含I列和2列值的dataframe。

代码语言:javascript
复制
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进行排序:

代码语言:javascript
复制
   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

这是不成功的:

代码语言:javascript
复制
df[reorder(df$ID, df$alpha, FUN = mean),]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-01 22:17:39

试一试

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-09-02 01:19:26

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

代码语言:javascript
复制
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 Rbase R来获取mean,然后使用order

代码语言:javascript
复制
df[with(df, order(-ave(alpha, ID))),]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46008444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档