基于R语言统计安大略省各城市2015-2017年图书馆数量的技术求助
安大略省各城市历年图书馆数量统计方案
前提修正:为合并数据集添加年份标识
原合并代码未给各年份数据添加区分标识,导致无法按年份统计。先修正合并代码,为每个数据集补充年份列后再合并:
# 读取各年份的图书馆数据集 data_2017 <- read.csv("Downloads/2017.csv") data_2016 <- read.csv("Downloads/2016.csv") data_2015 <- read.csv("Downloads/2015.csv") # 为每个数据集添加年份列,用于后续区分 data_2017$year <- 2017 data_2016$year <- 2016 data_2015$year <- 2015 # 提取三个数据集的共同列并合并 common_columns <- Reduce(intersect, list(colnames(data_2017), colnames(data_2016), colnames(data_2015))) data_combined <- rbind( subset(data_2017, select = common_columns), subset(data_2016, select = common_columns), subset(data_2015, select = common_columns) ) # 保存带年份标识的合并数据集 write.csv(data_combined, "Downloads/data_combined.csv", row.names = FALSE)
生成统计数据框(两种实现方式)
以下代码将生成以城市名为行标题、2015/2016/2017为列标题的数据框,统计各城市对应年份的图书馆数量。
方式一:使用Base R实现
# 用table函数统计城市-年份的图书馆数量 count_table <- table(data_combined$city, data_combined$year) # 转换为数据框并调整列顺序 library_count_df <- as.data.frame.matrix(count_table) library_count_df <- library_count_df[, c("2015", "2016", "2017")]
方式二:使用tidyverse工具包实现(更灵活)
# 加载所需包 library(dplyr) library(tidyr) # 分组统计+转换宽格式 library_count_df <- data_combined %>% group_by(city, year) %>% summarise(library_count = n(), .groups = "drop") %>% pivot_wider(names_from = year, values_from = library_count, values_fill = 0) %>% column_to_rownames(var = "city") %>% select(c(2015, 2016, 2017)) # 确保列顺序符合要求
注意事项
- 请确保数据集中代表「城市」的列名为
city,若实际列名不同(如City或Municipality),需将代码中的city替换为对应列名。 values_fill = 0表示若某城市在某年份无图书馆记录,将填充数值0,可根据需求调整该参数。
内容的提问来源于stack exchange,提问作者user19769766
相关产品推荐
相关产品推荐

