首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于标头将文本转换为data.frame

基于标头将文本转换为data.frame
EN

Stack Overflow用户
提问于 2019-11-22 11:52:51
回答 1查看 38关注 0票数 2

我将一个.txt文件上传到R中,如下所示:Election_Parties <- readr::read_lines("Election_Parties.txt")。假设文件中有以下文本:

代码语言:javascript
复制
BOLIVIA
P17-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimiento Nacionalista Revolucionario 
P19-Liberty and Justice (Libertad y Justicia [LJ])
P20-Tupak Katari Revolutionary Movement (Movimiento Revolucionario Tupak Katari [MRTK])

COLOMBIA
P1-Democratic Aliance M-19 (Alianza Democratica M-19 [AD-M19])
P2-National Popular Alliance (Alianza Nacional Popular [ANAPO])
P3-Indigenous Authorities of Colombia (Autoridades Indígenas de Colombia)

一句话:在每一句空话之后,一个新的国家开始了。我想将这个文本文件转换为一个数据文件,在这里,国家名称成为一个向量,而当事方名单成为一个向量。

期望产出:

代码语言:javascript
复制
Bolivia     P1-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimiento Nacionalista 
Bolivia     P19-Liberty and Justice (Libertad y Justicia [LJ])
Bolivia     P20-Tupak Katari Revolutionary Movement (Movimiento Revolucionario Tupak Katari [MRTK])
Colombia    P1-Democratic Aliance M-19 (Alianza Democratica M-19 [AD-M19])
Colombia    P2-National Popular Alliance (Alianza Nacional Popular [ANAPO])
Colombia    P3-Indigenous Authorities of Colombia (Autoridades Indígenas de Colombia)

如果可能的话,我希望解决方案是基于标题的。

编辑:我刚刚意识到每一个新的国家都是从P1开始的,所以解决方案也可以基于这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 12:21:23

如果分隔符总是"",那么一旦将文本放在向量中,就使用它作为分界线,并进行累加,将它们分成几个组。

代码语言:javascript
复制
TXT = readr::read_lines("Election_Parties.txt")
#we add a separator for your first country
TXT = c("",TXT)
idx <- cumsum(TXT=="")
# use idx <- cumsum(!grepl("^[A-Z]",TXT)) if weird newline

你可以看到玻利维亚进1,哥伦比亚进2

代码语言:javascript
复制
tibble::tibble(TXT,idx)
# A tibble: 10 x 2
   TXT                                                                       idx
   <chr>                                                                   <int>
 1 ""                                                                          1
 2 BOLIVIA                                                                     1
 3 "P17-Nationalist Revolutionary Movement-Free Bolivia Movement (Movimie…     1
 4 P19-Liberty and Justice (Libertad y Justicia [LJ])                          1
 5 P20-Tupak Katari Revolutionary Movement (Movimiento Revolucionario Tup…     1
 6 ""                                                                          2
 7 COLOMBIA                                                                    2
 8 P1-Democratic Aliance M-19 (Alianza Democratica M-19 [AD-M19])              2
 9 P2-National Popular Alliance (Alianza Nacional Popular [ANAPO])             2
10 P3-Indigenous Authorities of Colombia (Autoridades Indígenas de Colomb…     2

我们只对每个组应用一个函数,并创建一个数据格式。

代码语言:javascript
复制
func = function(x){
  data.frame(Country=x[2],Parties=x[3:length(x)])
}
do.call(rbind,by(TXT,idx,func))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58993738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档