如何在R中合并数据集并绘制各州人均新冠确诊、死亡病例统计图
问题解决指南
核心问题原因
- 分组统计函数使用错误:
group_by(state)搭配summarise()时不应使用ave()函数,该函数会返回和原数据集行数一致的结果,导致每个州生成多条重复记录,是州名重复的核心诱因,且你未将统计结果赋值给变量,后续操作的还是原始的县级别数据集 - 合并匹配键写反:
left_join的by参数逻辑写反,原本是新冠数据集的state列匹配人口数据集的state_territory列,你写的逻辑完全相反,无法正确匹配数据 - 多余的行名转列操作:原始新冠数据集已经有
state列,不需要使用rownames_to_column额外生成州名列,该操作会导致列名冲突、数据错乱
完整实现代码
首先加载所需依赖包:
library(tidyverse) library(tibble)
第一步:读取数据集
# 读取新冠分郡县统计数据集 covid <- read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/rolling-averages/us-counties.csv") # 读取2020年美国各州人口估算数据集 US_state_pop_2020_estimate <- read_delim("https://www.dropbox.com/s/3rbr3kjooiq8yqp/US_state_pop_2020_estimate.txt?dl=0", delim = "\t")
第二步:按州汇总新冠数据
如果需要计算累计总确诊/总死亡使用sum(),如果需要计算平均日增数据替换为mean()即可:
covid_state <- covid %>% group_by(state) %>% summarise( total_cases = sum(cases, na.rm = TRUE), total_deaths = sum(deaths, na.rm = TRUE), .groups = "drop" # 汇总完成后自动取消分组 )
第三步:合并数据集并计算人均指标
此处按每万人为单位计算人均指标,数值可读性更强,可根据需求调整单位:
covid_with_pop <- covid_state %>% left_join(US_state_pop_2020_estimate, by = c("state" = "state_territory")) %>% mutate( cases_per_10k = total_cases / pop_2020 * 10000, deaths_per_10k = total_deaths / pop_2020 * 10000 )
第四步:可视化示例(各州人均确诊数柱状图)
covid_with_pop %>% arrange(desc(cases_per_10k)) %>% mutate(state = fct_inorder(state)) %>% ggplot(aes(x = cases_per_10k, y = state)) + geom_bar(stat = "identity", fill = "#2a68b9") + labs(x = "每万人确诊数", y = "州名", title = "美国各州人均新冠确诊数统计") + theme_minimal()
内容的提问来源于stack exchange,提问作者angel_30
相关产品推荐
相关产品推荐

