如何用R函数统计数据集中指定列的唯一值出现频率?
生成指定列的唯一值频率表
嘿,既然你已经在使用tidyverse生态了,那用它的工具来实现你想要的频率统计简直得心应手!这里有几种简单直接的方法:
方法1:用count()函数(最简洁)
count()是tidyverse里专门用来统计分组出现次数的函数,一行代码就能搞定:
library(tidyverse) library(lubridate) # 你的数据集 myDF <- tibble(country = rep(c("UK", "US"), each = 3), date = c("2020-01-01", "2020-02-01", "2020-02-01", "2020-03-01", "2020-03-01", "2020-03-01")) %>% mutate(date = as_date(date)) # 生成频率表 myDF %>% count(date, name = "freq")
执行后你会得到完美符合需求的输出:
# A tibble: 3 × 2 date freq <date> <int> 1 2020-01-01 1 2 2020-02-01 2 3 2020-03-01 3
方法2:group_by() + summarise()(更灵活)
如果之后需要扩展统计其他指标,这种组合方式更灵活:
myDF %>% group_by(date) %>% summarise(freq = n(), .groups = "drop")
group_by(date)按日期列分组summarise(freq = n())计算每组的行数(即出现频率).groups = "drop"取消分组状态,返回普通的tibble
额外技巧:按频率排序
如果想把结果按频率从高到低排列,只需在后面加个arrange():
myDF %>% count(date, name = "freq") %>% arrange(desc(freq))
输出会变成:
# A tibble: 3 × 2 date freq <date> <int> 1 2020-03-01 3 2 2020-02-01 2 3 2020-01-01 1
内容的提问来源于stack exchange,提问作者kiwi




