如何在R语言中对DataFrame列的频率分布进行排序
嘿,我来帮你搞定这个R语言的小问题!你已经知道用table()函数把DataFrame的列转成频率分布了,接下来要给这个分布排序其实超简单,我用你给的示例数据一步步演示给你看:
先把示例数据搭好
首先先把你提到的测试DataFrame定义完整:
a <- c(13, 14, 15, 16, 15, 15, 22, 21, 44, 21) b <- c(16, 17, 17, 18, 18, 22, 17, 16, 16, 17) test <- data.frame(a, b)
生成目标列的频率分布
比如我们先处理列a,用table()函数生成频率分布:
# 生成列a的频率分布 freq_a <- table(test$a) # 查看原始结果 freq_a
这时候输出的是默认按数值大小排序的结果,如果你想按出现频率排序,就看下面的操作。
对频率分布排序
R里的sort()函数可以直接对table生成的结果进行排序,分两种常用场景:
按频率从高到低排序(最常用)
想快速看到哪个值出现次数最多,就用decreasing = TRUE:
sorted_freq_a_desc <- sort(freq_a, decreasing = TRUE) sorted_freq_a_desc
运行后你会看到15(出现3次)排在最前面,然后是21(2次),剩下的都是1次的。
按频率从低到高排序
如果想找出现次数最少的值,就把参数改成FALSE:
sorted_freq_a_asc <- sort(freq_a, decreasing = FALSE) sorted_freq_a_asc
可选:转成DataFrame方便后续处理
如果后续要对排序后的结果做更多操作,比如绘图、统计,可以把它转成DataFrame格式:
# 转成DataFrame sorted_df <- as.data.frame(sorted_freq_a_desc) # 给列起个更直观的名字 colnames(sorted_df) <- c("Value", "Frequency") sorted_df
当然,对列b的操作方法完全一样,把test$a换成test$b就行啦!
内容的提问来源于stack exchange,提问作者W Barker
相关产品推荐
相关产品推荐

