首先根据一列中出现值的次数对数据帧进行排序,然后再按第二列对数据帧进行排序

时间:2019-07-08 23:23:23

标签: r sorting dataframe

我有一个数据框,在该数据框下,我想根据数值在第一列中出现的次数(首先是较大的值)进行排序,然后在第二列中按字母顺序(A-Z)进行排序。

Name<-c("jack","jack","bob","david","mary")
Surname<-c("arf","dfg","hjk","dfgg","bn")
n1<-data.frame(Name, Surname)

应该是这样的:

n1<-n1[
  order( n1[,1], n1[,2] ),
  ]

但是我不知道如何基于值的计数进行数字排序。

3 个答案:

答案 0 :(得分:2)

使用sqldf类似于:

library(sqldf)

n2 <- sqldf('SELECT * FROM 
             n1 JOIN (SELECT Name, COUNT(*) as C FROM n1 GROUP BY Name) as T 
             on n1.Name = T.Name 
             ORDER BY C DESC, Surname')

首先将名称分组,然后根据计数以适当的顺序和Surname的字母顺序进行排序。

答案 1 :(得分:2)

如@thelatemail所建议,您可以在base R中使用:

n1[order(-table(n1$Name)[n1$Name], n1$Surname), ]

要先按姓氏排序,请将参数交换到order()

答案 2 :(得分:1)

使用tf如下:

dplyr