为了尝试获取列中变量的频率,我使用了以下代码:
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种不同的运动?
或者,如果有更好的方法可以解决这个问题。
任何帮助将不胜感激!
答案 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],]