我想根据最后一列中重复给定字符的最高次数对data.frame进行排序
数据=
chr start end name
1 234 267 ttn
2 345 367 Elm
3 445 489 ttn
4 544 598 Rm
5 644 680 ttn
我想要一些像这样的东西
chr start end name
1 234 267 ttn
3 445 489 ttn
5 644 680 ttn
2 345 367 Elm
4 544 598 Rm
答案 0 :(得分:4)
这是一种快速data.table
方法,它将按引用对数据进行排序
library(data.table)
setorder(setDT(df)[, indx := .N, by = name], -indx)[]
# chr start end name indx
# 1: 1 234 267 ttn 3
# 2: 3 445 489 ttn 3
# 3: 5 644 680 ttn 3
# 4: 2 345 367 Elm 1
# 5: 4 544 598 Rm 1
答案 1 :(得分:3)
尝试
data[with(data, order(-ave(seq_along(name), name, FUN=length))),]
# chr start end name
#1 1 234 267 ttn
#3 3 445 489 ttn
#5 5 644 680 ttn
#2 2 345 367 Elm
#4 4 544 598 Rm
或另一种base R
方法
data[order(factor(data$name, levels=names(sort(-table(data$name))))),]
# chr start end name
# 1 1 234 267 ttn
# 3 3 445 489 ttn
# 5 5 644 680 ttn
# 2 2 345 367 Elm
# 4 4 544 598 Rm
或使用dplyr
library(dplyr)
data %>%
group_by(name) %>%
mutate(n=n()) %>%
arrange(-n) %>%
select(-n)