是否有一个简单的单行命令来获取 R 中分类变量的排序频率 table?
Is there a simple one-line command to get a sorted frequency table of a categorical variable in R?
问题
已经有人问过几次如何在 R 中生成分类变量的排序频率 table(例如,参见 this question which is marked a duplicate of a generic data frame sorting question)。答案建议三个连续的操作:1. 生成频率 table,2. 转换为数据框,3. 排序(参见下面的示例)。
这么简单的操作,还是比较复杂的。更重要的是,数据框的 summary()
将为您提供(对于相关列)我正在寻找的完全排序频率 table 的前 5 行(前提是不同值的数量在此列大于 5)。
例子
考虑以下形式的数据框
example_df <- data.frame("Avg" = c(2558,2532,2503,2498,2491,2491,2477,2467,2460,2458,2445,2422), "Name" = c("Jun","Wang","Xi","Wang","Wang","Ma","Li","Ma","Xi","Lin","Yang","Zhao"))
但更长,"Name" 有几千行和几千个不同的值。
提取名字频率 table 且最常见的名字排在最前面的最简单方法是什么?这将很有用,因为一个大的 table 大部分名称只出现一次不会提供太多信息。
你可以做到
example_ft<-as.data.frame(table(example_df$Name))
example_ft<-example_ft[order(-example_ft$Freq),]
或
library(plyr)
example_ft<-as.data.frame(table(example_df$Name))
example_ft<-arrange(example_ft,desc(Freq),Var1)
这些是上面链接的先前问题中建议的解决方案。两者都按预期产生以下 example_ft(尽管行号不同)
Var1 Freq
5 Wang 3
4 Ma 2
6 Xi 2
1 Jun 1
2 Li 1
3 Lin 1
7 Yang 1
8 Zhao 1
但这两个选项看起来都比较复杂。我的猜测是可能有一种更简单直接的方法。确实有一个非常简单的命令可以提供所需的输出(但仅前 5 行,并且仅在其他不相关的输出中),summary()
:
summary(example_df)
输出:
Avg Name
Min. :2422 Wang :3
1st Qu.:2460 Ma :2
Median :2484 Xi :2
Mean :2484 Jun :1
3rd Qu.:2499 Li :1
Max. :2558 Lin :1
(Other):2
这个怎么样? :
sort(table(example_df$Name),decreasing = TRUE)
问题
已经有人问过几次如何在 R 中生成分类变量的排序频率 table(例如,参见 this question which is marked a duplicate of a generic data frame sorting question)。答案建议三个连续的操作:1. 生成频率 table,2. 转换为数据框,3. 排序(参见下面的示例)。
这么简单的操作,还是比较复杂的。更重要的是,数据框的 summary()
将为您提供(对于相关列)我正在寻找的完全排序频率 table 的前 5 行(前提是不同值的数量在此列大于 5)。
例子
考虑以下形式的数据框
example_df <- data.frame("Avg" = c(2558,2532,2503,2498,2491,2491,2477,2467,2460,2458,2445,2422), "Name" = c("Jun","Wang","Xi","Wang","Wang","Ma","Li","Ma","Xi","Lin","Yang","Zhao"))
但更长,"Name" 有几千行和几千个不同的值。
提取名字频率 table 且最常见的名字排在最前面的最简单方法是什么?这将很有用,因为一个大的 table 大部分名称只出现一次不会提供太多信息。
你可以做到
example_ft<-as.data.frame(table(example_df$Name))
example_ft<-example_ft[order(-example_ft$Freq),]
或
library(plyr)
example_ft<-as.data.frame(table(example_df$Name))
example_ft<-arrange(example_ft,desc(Freq),Var1)
这些是上面链接的先前问题中建议的解决方案。两者都按预期产生以下 example_ft(尽管行号不同)
Var1 Freq
5 Wang 3
4 Ma 2
6 Xi 2
1 Jun 1
2 Li 1
3 Lin 1
7 Yang 1
8 Zhao 1
但这两个选项看起来都比较复杂。我的猜测是可能有一种更简单直接的方法。确实有一个非常简单的命令可以提供所需的输出(但仅前 5 行,并且仅在其他不相关的输出中),summary()
:
summary(example_df)
输出:
Avg Name
Min. :2422 Wang :3
1st Qu.:2460 Ma :2
Median :2484 Xi :2
Mean :2484 Jun :1
3rd Qu.:2499 Li :1
Max. :2558 Lin :1
(Other):2
这个怎么样? :
sort(table(example_df$Name),decreasing = TRUE)