首页 > 解决方案 > 按特定列中最常见的值对数据框进行排序

问题描述

我在 R 中有一个数据框,这是它的一部分:

Kif21a PTHR24115 ENSMUSG00000022629
Acss3 PTHR24115 ENSMUSG00000035948
Nr1h4 PTHR24082 ENSMUSG00000047638
Rarg PTHR24082 ENSMUSG00000001288
Vdr PTHR24082 ENSMUSG00000022479
Pamr1 PTHR24254 ENSMUSG00000027188

我想要实现的是按第二列中最常见的元素(出现次数更多)对数据框进行排序,这是所需的结果:

Nr1h4 PTHR24082 ENSMUSG00000047638
Rarg PTHR24082 ENSMUSG00000001288
Vdr PTHR24082 ENSMUSG00000022479
Kif21a PTHR24115 ENSMUSG00000022629
Acss3 PTHR24115 ENSMUSG00000035948
Pamr1 PTHR24254 ENSMUSG00000027188

非常感谢!

标签: r

解决方案


一个选择是

library(dplyr)
df1 %>%
   group_by(col2) %>%
   mutate(n = n()) %>%
   ungroup %>%
   arrange(desc(n))

另一种选择是add_count

df1 %>%
  add_count(col2) %>%
  arrange(desc(n))
# A tibble: 6 x 4
#  col1   col2      col3                   n
#  <chr>  <chr>     <chr>              <int>
#1 Nr1h4  PTHR24082 ENSMUSG00000047638     3
#2 Rarg   PTHR24082 ENSMUSG00000001288     3
#3 Vdr    PTHR24082 ENSMUSG00000022479     3
#4 Kif21a PTHR24115 ENSMUSG00000022629     2
#5 Acss3  PTHR24115 ENSMUSG00000035948     2
#6 Pamr1  PTHR24254 ENSMUSG00000027188     1

base Rave

df1[with(df1, order(-ave(seq_along(col2), col2, FUN = length))),]

数据

df1 <- structure(list(col1 = c("Kif21a", "Acss3", "Nr1h4", "Rarg", "Vdr", 
"Pamr1"), col2 = c("PTHR24115", "PTHR24115", "PTHR24082", "PTHR24082", 
"PTHR24082", "PTHR24254"), col3 = c("ENSMUSG00000022629", "ENSMUSG00000035948", 
"ENSMUSG00000047638", "ENSMUSG00000001288", "ENSMUSG00000022479", 
"ENSMUSG00000027188")), class = "data.frame", row.names = c(NA, 
-6L))

推荐阅读