我有一个数据框,在该数据框下,我想根据数值在第一列中出现的次数(首先是较大的值)进行排序,然后在第二列中按字母顺序(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] ),
]
但是我不知道如何基于值的计数进行数字排序。
答案 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