首页 > 解决方案 > 重构奇数数据结构,添加重复值

问题描述

我得到了一个结构奇特的数据集,我需要为 GIS 中的可视化做准备。数据来自中国不同地区的历史报纸,出版于 1921 年至 1937 年间。excel 表的结构如下:

每个位置都有一张纸, 2. 每张纸都有每年的一列,每份报纸的变量按 7 行的块组织,并用空白行分隔。这是其中一张纸的示例:

,1921年,1922年,1923年
,,,
Title of Newspaper 1,遠東報(Yuan Dong Bao),,
(Language),漢文,,
(Ideology),東支鉄道機関紙,,
(Owner),(総経理)史秉臣,,
(Editior),張福臣,,
(Publication Frequency),日刊,,
(Circulation),"1,000",,
(Others),1908年創刊、東支鉄道に支那か勢力を扶殖せし以来著しく排日記事を記載す,,
,,,
Title of Newspaper 2,ノーウォスチ・ジーズニ(Nōuosuchi Jīzuni),ノォウォスチ・ジーズニ,ノウウスチジーズニ
(Language),露文,露文,露文
(Ideology),政治、社会、文学、商工新聞,社会民主,社会民主
(Owner),タワリシエスウオ・ペチャヤチャ,ぺチヤチ合名会社,ぺチヤチ合名会社
(Editior),イ・エフ・ブロクミユレル,イ・エフ・ブロクミユレル(本名クリオリン)、記者(社員)チエルニヤエフスキー,イ・エフ・ブロクミユレル(本名クリオリン)、記者(社員)チエルニヤエフスキー
(Publication Frequency),日刊,日刊,日刊
(Circulation),"約3,000","約3,000","3,000"
(Others),1909年創刊、猶太人会より補助を受く、「エス・エル」党の過激派に接近せる主張をなす、哈爾賓諸新聞中最も紙面整頓せるものにして記事多く比較的正確なり、日本お対露干渉排斥排日記事を掲載す,1909年創刊、エス・エル党の過激派に接近せる主張をなす、哈爾賓諸新聞中最も紙面整頓し記事多く比較的正確にして最も有力なるものなり、日本お対露干渉排斥及一般排日記事を掲載し「チタ」政府を擁護す,1909年創刊、過激派に益々接近し長春会議以後は「ダリタ」通信と相待って過激派系の両翼たりし感あり、紙面整頓し記事比較的正確且つ金力に於て猶太人系の後援を有し最も有力なる新聞たり、一般排日記事を掲載し支那側に媚を呈す、「チタ」政権の擁護をなし当地に於ける機関紙たりと自任す
,,,
Title of Newspaper 3,北満洲(Kita Manshū),哈爾賓日々新聞(Harbin Nichi-Nichi Shimbun),哈爾賓日々新聞(Harbin Nichi-Nichi Shimbun)
(Language),邦文,邦文,邦文
(Ideology),,,
(Owner),合資組織,社長 児玉右二,株式組織 (社長)児玉右二
(Editior),木下猛、遠藤規矩郎,編集長代理 阿武信一,(副社長)磯部検三 (主筆)阿武信一
(Publication Frequency),日刊,日刊,日刊
(Circulation),"1,000内外",,
(Others),大正3年7月創刊,大正11年1月創刊の予定、西比利亜新聞、北満洲及哈爾賓新聞の合同せるものなり,大正11年1月創刊

是的,它也有许多非拉丁语言,这使它更具挑战性。我想为每年创建一个新矩阵,然后旋转表格以将每份报纸的 7 行变成列,这样我最终得到的每一行对应于一份报纸。最后,我需要生成一个新的列来提供报纸的位置。我还想为每份报纸添加一个唯一标识符,并添加另一列说明年份,以防万一我决定将整个数据集合并到一个矩阵中。我在 Excel 中手动进行了转换,但整个数据集包含数千份报纸的数据,因此我需要自动化该过程。这是我想要实现的目标(没有唯一标识符和年份列):

Title of Newspaper,Language,Ideology,Owner,Editor,Publication Frequency,Circulation,Others,Location
直隷公報(Zhi Li Gong Bao),漢文,直隷省公署の公布機関,直隷省,,日刊,2500,光緒22年創刊、官報の改称,Tientsin
大公報(Da Gong Bao),漢文,稍親日的,合資組織,樊敏鋆,日刊,,光緒28年創刊、倪嗣仲の機関にて現に王祝山其の全権を握り居れり、9年夏該派の没落と共に打撃を受け少しく幹部を変更して再発行せり、但し資金は依然王より供給し居れり,Tientsin
天津日々新聞(Tianjin Ri Ri Xin Wen),漢文,日支親善,方若,郭心培,日刊,2000,光緒27年創刊、親日主義を以て一貫す、國聞報の後身なり民国9年安直戦争中直隷派の圧迫を受けたるも遂に屈せさりし,Tientsin
時聞報(Shi Wen Bao),漢文,中立,李大義,王石甫,,1000,光緒30年創刊、紙面相当価値あり,Tientsin

有没有办法在 R 中做到这一点?我将如何去做?

标签: rmutated

解决方案


我在上面的评论中概述了一个计划。这是未经测试的代码,使其更加具体。我会继续测试直到它有效

inps <- readLines( ~/Documents/R_code/Tientsin unformatted.txt")
inp2 <- inps[ -(1:2) ]
  # 'identify groupings with cumsum(grepl(",,,", inp2) as the second arg to split'

inp.df <- lapply( split(inp2, cumsum(grepl(",,,", inp2) , read.csv)
library(data.table) # only needed if you use rbindlist not needed for do.call(rbind , ..

# make a list of one-line dataframes as below
# finally run rbindlist or do.call(rbind, ...)

in.dt <- do.call( rbind, (inp.df)) # rbind  checks for ordering of columns

这是从一组文本行生成单行数据框的步骤:

 txt <- 'Title of Newspaper 1,遠東報(Yuan Dong Bao),,
 (Language),漢文,,
 (Ideology),東支鉄道機関紙,,
 (Owner),(総経理)史秉臣,,
 (Editior),張福臣,,
 (Publication Frequency),日刊,,
 (Circulation),"1,000",,
 (Others),1908年創刊、東支鉄道に支那か勢力を扶殖せし以来著しく排日記事を記載す,,'

                                                                  
 temp=read.table(text=txt, sep="," , colClasses=c(rep("character", 2), NA, NA))
 in1 <- setNames( data.frame(as.list(temp$V2)), temp$V1)
 in1
#-------------------------
 Title of Newspaper 1 (Language)     (Ideology)          (Owner) (Editior) (Publication Frequency) (Circulation)
1 遠東報(Yuan Dong Bao)       漢文 東支鉄道機関紙 (総経理)史秉臣    張福臣                    日刊         1,000
                                                      

    (Others)
1 1908年創刊、東支鉄道に支那か勢力を扶殖せし以来著しく排日記事を記載す

因此,看起来单独构建的项目的列名需要进一步处理,以使它们能够通过plyr::rbindlist或成功“绑定”data.table::rbindlist


推荐阅读