You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中重构特殊结构的近代中国报业数据集以用于GIS可视化

需求实现方案

完全可以在R中实现该批量处理需求,具体实现步骤如下:

步骤1:安装加载所需依赖包

需用到Excel读取、数据清洗、多语言编码处理相关工具包,执行以下代码加载:

# 安装依赖(仅首次执行)
install.packages(c("readxl", "tidyverse", "stringi"))
# 加载包
library(readxl)
library(tidyverse)
library(stringi)
# 全局设置编码为UTF-8,避免多语言乱码
Sys.setlocale("LC_ALL", "UTF-8")

步骤2:定义单Sheet数据处理函数

核心逻辑是对单个地点的Sheet完成块识别、长宽转换,代码示例:

process_single_sheet <- function(file_path, sheet_name) {
  # 读取Sheet数据,不自动识别表头
  raw_data <- read_excel(file_path, sheet = sheet_name, col_names = FALSE, .name_repair = "minimal")
  # 提取年份作为列名
  year_cols <- str_remove(as.character(raw_data[1, ]), "年")
  colnames(raw_data) <- c("attr_name", year_cols[-1])
  # 去掉第一行表头行、全空行
  raw_data <- raw_data[-1, ] %>% filter(if_any(everything(), ~!is.na(.)))
  # 给每个报纸块打分组ID:每遇到报纸标题行则分组ID+1
  raw_data <- raw_data %>% 
    mutate(newspaper_id = cumsum(str_detect(attr_name, "Title of Newspaper")))
  # 长格式转换+按年份展开
  processed <- raw_data %>% 
    pivot_longer(cols = -c(attr_name, newspaper_id), names_to = "year", values_to = "value") %>% 
    filter(!is.na(value)) %>% # 去掉该年份无记录的空值
    pivot_wider(names_from = attr_name, values_from = value) %>% 
    # 附加地点列、生成唯一标识
    mutate(
      Location = sheet_name,
      unique_id = paste(Location, newspaper_id, year, sep = "_")
    ) %>% 
    # 重命名列匹配目标格式
    rename(
      `Title of Newspaper` = `Title of Newspaper`,
      Language = `(Language)`,
      Ideology = `(Ideology)`,
      Owner = `(Owner)`,
      Editor = `(Editior)`,
      `Publication Frequency` = `(Publication Frequency)`,
      Circulation = `(Circulation)`,
      Others = `(Others)`
    )
  return(processed)
}

步骤3:批量处理所有Sheet并合并全量数据

# 替换为你的Excel文件路径
file_path <- "你的历史报纸数据集.xlsx"
# 获取所有Sheet名(即所有地点)
all_sheets <- excel_sheets(file_path)
# 批量处理所有Sheet并合并
full_data <- map_dfr(all_sheets, ~process_single_sheet(file_path, .x))
# 导出结果为CSV(可根据需求更换导出格式)
write_csv(full_data, "全量历史报纸处理结果.csv", na = "")

注意事项

  • 若读取时出现多语言乱码,可在read_excel函数中指定locale = locale(encoding = "GBK" / "Shift-JIS" / "UTF-8")匹配文件原始编码
  • 如需单独按年份输出矩阵,可对最终全量表按year列分组后批量导出即可
  • Circulation列的引号、千位逗号可通过正则表达式批量清理后转换为数值类型,按需添加处理逻辑即可

内容的提问来源于stack exchange,提问作者Thorsten Kahlert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:07