2016-02-10 34 views
0

我正在查看投票數據,它是一個嵌套列表。我試圖讓我的列表中的每個元素(示例波紋管)上的多個變量R:檢索嵌套列表的多個變量

因此,對於每個元素「投票」,我試圖得到的uid和個人的投票贊成或反對(「倒」和「contre」)法律。

我儘量簡化原始數據(可以發現here

This is the simplified list i came up with : 
scrutin1_detail<-list(uid="VTANR5L14V1",organref="P0644420") 
scrutin1_vote1_for<-list(acteurref="PA1816",mandatRef="PM645051") 
scrutin1_vote2_for<-list(acteurref="PA1817",mandatRef="PM645052") 
scrutin1_vote3_for<-list(acteurref="PA1818",mandatRef="PM645053") 
scrutin1_vote_for<-list(scrutin1_vote1_for,scrutin1_vote2_for,scrutin1_vote3_for) 

scrutin1_vote1_against<-list(acteurref="PA1816",mandatRef="PM645051") 
scrutin1_vote2_against<-list(acteurref="PA1817",mandatRef="PM645052") 
scrutin1_vote3_against<-list(acteurref="PA1818",mandatRef="PM645053") 
scrutin1_vote_against<-list(scrutin1_vote1_against,scrutin1_vote2_against,scrutin1_vote3_against) 

votant1<-list(pours=scrutin1_vote_for,contres=scrutin1_vote_against) 
vote1<-list(decompte_nominatif=votant1) 
ventilationVotes1<-list(vote=vote1) 
scrutin1<-list(scrutin1_detail,list(ventilationVotes=ventilationVotes1)) 


# Scrutin 2 

scrutin2_detail<-list(uid="VTANR5L14V5",organref="P0644423") 
scrutin2_vote1_for<-list(acteurref="PA1816",mandatRef="PM645051") 
scrutin2_vote2_for<-list(acteurref="PA1817",mandatRef="PM645052") 
scrutin2_vote3_for<-list(acteurref="PA1818",mandatRef="PM645053") 
scrutin2_vote_for<-list(scrutin1_vote1_for,scrutin1_vote2_for,scrutin1_vote3_for) 

scrutin2_vote1_against<-list(acteurref="PA1816",mandatRef="PM645051") 
scrutin2_vote2_against<-list(acteurref="PA1817",mandatRef="PM645052") 
scrutin2_vote3_against<-list(acteurref="PA1818",mandatRef="PM645053") 
scrutin2_vote_against<-list(scrutin2_vote1_against,scrutin2_vote2_against,scrutin2_vote3_against) 

scrutin2_votant1<-list(pours=scrutin2_vote_for,contres=scrutin2_vote_against) 
scrutin2_vote1<-list(decompte_nominatif=scrutin2_votant1) 
scrutin2_ventilationVotes1<-list(vote=scrutin2_vote1) 
scrutin2<-list(scrutin2_detail,list(ventilationVotes=scrutin2_ventilationVotes1)) 
scrutins<-list(scrutins=list(scrutin=list(scrutin1,scrutin2))) 

,所以我期待在年底(但我真的有興趣瞭解如何做到這一點,因爲我碰到這個問題相當常)建立與這些列中的數據框:

  • UID
  • 贊成/反對(如果是在列表中 「倒」(對於)或 「駁」(反對) -acteurref -m andatref
+0

您是否嘗試使用'jsonlite :: fromJSON()'讀取數據?它仍然很大,但至少它是嵌套的data.frames,你可以用'$'來進行子集化。 – alistaire

回答

0

可悲的是我不說話(或讀法)等我不能夠做出很多正確的猜測到對象的項目名稱的含義使用alistaire的建議構建的:

library(jsonlite) 
scrutin1_detail <- fromJSON("~/Downloads/Scrutins_XIV.json") 

> length(scrutin1_detail[[1]]) 
[1] 1 
> length(scrutin1_detail[[1]][[1]]) 
[1] 18 
> names(scrutin1_detail[[1]][[1]]) 

[1] "@xmlns:xsi"    "uid"      
[3] "numero"     "organeRef"    
[5] "legislature"    "sessionRef"    
[7] "seanceRef"    "dateScrutin"    
[9] "quantiemeJourSeance"  "typeVote"    
[11] "sort"     "titre"     
[13] "demandeur"    "objet"     
[15] "modePublicationDesVotes" "syntheseVote"   
[17] "ventilationVotes"  "miseAuPoint"    
> str(scrutin1_detail[[1]][[1]]$uid) 
chr [1:1219] "VTANR5L14V1" "VTANR5L14V2" "VTANR5L14V3" ... 

> table(scrutin1_detail[[1]][[1]]$organeRef) 

PO644420 
    1219 
> table(scrutin1_detail[[1]][[1]]$sessionRef) 

SCR5A2012E1 SCR5A2012E2 SCR5A2013E1 SCR5A2013E3 SCR5A2013O1 SCR5A2014E1 
     15   5   42   4   529   50 
SCR5A2014E2 SCR5A2014O1 SCR5A2015E1 SCR5A2015E2 SCR5A2015O1 SCR5A2016O1 
      7   253   18   5   236   55 

也許你應該幫助我們講英語的人理解這一點。提供上下文而不僅僅是代碼是非常有益的。

+0

嗨,謝謝你所有的答案,是使用json來加載這樣的數據 download.file(「http://data.assemblee-nationale.fr/static/openData/repository/LOI/scrutins/Scrutins_XIV.json。 (「data/Scrutins_XIV.json.zip」,文件名=「Scrutins_XIV.json」) library(「rjson」,zip)「,destfile =」data/Scrutins_XIV.json.zip「,method ='curl') con <-unz 「) json_file < - 」./ data/Scrutins_XIV.json「 json_data < - fromJSON(paste(readLines(json_file),collapse =」「)) –

+0

我們在法國投了一個很大的投票權來改變憲法,但只有25 %的議會投票。所以我有興趣看看誰來投票的法律,誰從來沒有出現,以及他們投票。 –

+0

scrutin是每個scrutin裏面的投票,有一個組「ventVotes」,意思是投票的分裂,哪個組投票贊成或反對法律。在這個名單中有一個組叫「groupe」,它是一個政治組,在每個「 groupe「有一組」decompteNominative「意思是每個人投票(這是我感興趣的)。這個小組裏面有三個小組,第一個是「NonVotants」是沒有出現的人的名單。 –