我在 data.frame 中有以下数据:
reg id n
Echo E1 7
Charlie C1 3
Alpha A1 5
Echo E2 1
Alpha A2 4
Charlie C2 9
我试图首先按reg sum对其进行排序,然后按n(均递减)对其进行排序。 结果将是:
reg id n
Charlie C2 9
Charlie C1 3
Alpha A1 5
Alpha A2 4
Echo E1 7
Echo E2 1
因为 Charlie 有 12 个,Alpha 有 9 个,Echo 有 8 个。
到目前为止,我只能进行分组和排序的第二部分(通过糟糕地使用 dplyr)。 reg 列仍然按字母顺序排序。
有没有一个优雅的解决方案?
最佳答案
使用 dplyr
# data
df1 <- read.table(text = "reg id n
Echo E1 7
Charlie C1 3
Alpha A1 5
Echo E2 1
Alpha A2 4
Charlie C2 9", header = TRUE)
library(dplyr)
df1 %>%
group_by(reg) %>%
mutate(nSum = sum(n)) %>%
arrange(-nSum, -n) %>%
select(-nSum)
# Source: local data frame [6 x 3]
# Groups: reg [3]
#
# reg id n
# <fctr> <fctr> <int>
# 1 Charlie C2 9
# 2 Charlie C1 3
# 3 Alpha A1 5
# 4 Alpha A2 4
# 5 Echo E1 7
# 6 Echo E2 1
关于r - 首先按组总和对数据帧进行排序,然后按频率排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795499/