基于列中相同重复的数量对data.frame进行排序

时间:2015-02-12 17:52:20

标签: r

我想根据最后一列中重复给定字符的最高次数对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

2 个答案:

答案 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)