如何排序as.data.frame表

时间:2018-09-16 01:32:13

标签: r

为了尝试获取列中变量的频率,我使用了以下代码:

s = table(students$Sport)
t = as.data.frame(s)
names(t)[1] = 'Sport'
t

尽管可以,但它却给了我一个未排序的庞大列表,例如:

1            Football             20310
2            Rugby                80302
3            Tennis               5123
4            Swimming             73132
…            …                    … 
68           Basketball           90391

我将如何对表格进行排序,以便最频繁的运动排在最前面。另外,有没有办法只显示前5个选项?而不是全部68种不同的运动?

或者,如果有更好的方法可以解决这个问题。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr并在示例下方的一行中完成所有操作

library(dplyr)
students = data.frame(sport = c(rep("Football", 200), 
                            rep("Rugby", 130), 
                            rep("Tennis", 100), 
                            rep("Swimming", 40),
                            rep("Basketball", 10),
                            rep("Baseball", 300),
                            rep("Gimnastics", 70)
                            )
                  )
students %>% group_by(sport) %>% summarise( n = length(sport)) %>% arrange(desc(n)) %>% top_n(5, n)

# A tibble: 5 x 2
sport          n
  <fct>      <int>
1 Baseball     300
2 Football     200
3 Rugby        130
4 Tennis       100
5 Gimnastics    70

答案 1 :(得分:1)

您可以使用plyr软件包计数功能对字数和频率进行计数。与将其转换为数据框相比,一种更优雅的方法。

library(plyr)
d<-count(students,"Sport") #convert it to a dataframe first before using count.

订购功能可帮助您订购输出。使用-按降序排列。 [1:5]为您提供了前5行。如果需要所有条目,可以将其删除。

d[order(-d$freq)[1:5],]