r - 按特定列中最常见的值对数据框进行排序
问题描述
我在 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
非常感谢!
解决方案
一个选择是
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 R
与ave
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))
推荐阅读
- wicket - 检票口 JQWicket - 检票口
- php - 无法从 ASP Msxml2.ServerXMLHTTP.6.0 对象调用的 PHP 设置 cookie
- reactjs - 如何在减速器中调用动作?
- angular - ionic v4 导航错误
- c# - WPF - 害羞的标题
- javascript - 如何解决错误:“对预检请求的响应未通过访问控制检查”
- html - 如何将普通的 flexbox nav 变成响应式汉堡移动菜单?
- angularjs - iframe 在 IE 和 firefox 中无法使用 angularjs 路由
- openlayers - EventListener mouseup 或 mousedown 自 5.2.0 起不起作用
- python - How to store csv file to database in django?