r - 首先按组总和对数据帧进行排序,然后按频率排序

标签 r

我在 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/

相关文章:

r - 如何获取 p 值列表?

r - 将分组数据帧传递给 dplyr 中的自己的函数

r - 从数据框中选择多个顶部组

r - 使用 Biomart hsapiens_gene_ensembl 数据集时出现错误消息。有谁知道如何解决吗?

r - 在 lm lapply 调用列表中使用权重参数

R glm - 如何进行多重交叉验证

r - 计算 R 中 tidygraph 对象列表中相同列的频率?

r - 在R中按升序对行数据进行排序

r - 在 R 中安装 PKI 包时出错

r - 如何编写一个将 NULL 传递给 ggplot 而不会出现美学错误的函数