2017-01-18 33 views
1

感謝@hrbrmstr對於「Scraping a xml document (nested url-structure)」問題,我得到了一個很好的解決方案。將唯一值轉換爲新列並檢查所有其他值

但是從有識之士因此,出現了另一個問題:

現在我已經得到了以下數據結構...

$Vorname : chr "Jan" "Jan" "Jan" "Jan" ... 
$ Nachname : chr "Aken" "Aken" "Aken" "Aken" ... 
$ ID  : chr "1627" "1627" "1627" "1627" ... 
$ Fraktion : chr "Die Linke" "Die Linke" "Die Linke" "Die Linke" ... 
$ Reli  : chr "" "" "" "" ... 
$ Geschlecht: chr "Männlich" "Männlich" "Männlich" "Männlich" ... 
$ Auss_ord : chr "Auswärtiger Ausschuss" "Gremium nach § 23c Absatz 8 des Zollfahndungsdienstgesetzes" "Verteidigungsausschuss" "Unterausschuss Abrüstung, Rüstungskontrolle und Nichtverbreitung" ... 

這實際上是斕「Auss_ord」唯一的變數其中包含價值不同的國會議員佣金。

現在,我想要的是從當前的長版本切換到寬的數據幀版本。

對於「Auss_ord」中的每個唯一值(某些文本字符串),應該有一個新列,並且如果它是「True」,則會檢查另一個對象是否具有相同值。

這樣......

 Vorname Nachname ID Fraktion    Reli Geschlecht               Auss_ord 
    <chr>  <chr> <chr>  <chr>    <chr>  <chr>               <chr> 
1  Jan  Aken 1627 Die Linke      Männlich           Auswärtiger Ausschuss 
2  Jan  Aken 1627 Die Linke      Männlich  Gremium nach § 23c Absatz 8 des Zollfahndungsdienstgesetzes 
3  Jan  Aken 1627 Die Linke      Männlich           Verteidigungsausschuss 
4  Jan  Aken 1627 Die Linke      Männlich Unterausschuss Abrüstung, Rüstungskontrolle und Nichtverbreitung 
5 Stephan  Albani 1769 CDU/CSU      Männlich Ausschuss für Bildung, Forschung und Technikfolgenabschätzung 
6 Stephan  Albani 1769 CDU/CSU      Männlich           Ausschuss für Gesundheit 
7 Katrin Albsteiger 1770 CDU/CSU römisch-katholisch Weiblich             Schriftführer/in 
8 Katrin Albsteiger 1770 CDU/CSU römisch-katholisch Weiblich   Ausschuss für die Angelegenheiten der Europäischen Union 

...應該變成...

Example Dataframe (wide version)

我試着像

d1 <- dcast(df, Vorname ~ Nachname ~ ID ~ Fraktion ~ Reli, value.var="ausord") 

重塑業務
d2 <- reshape(df, idvar = "ID", timevar = "Auss_ord", direction = "wide") 

...但我沒有得到任何正確的結果,除了(對我來說)真正棘手執行檢查的值的唯一性

+1

這裏是[如何使一個可重複的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5965451#5965451),一個數據幀會比'str'的​​輸出更好。 –

回答

0

你可以這樣做的:

dcast(df,Vorname+Nachname+ID+Fraktion+Reli+Geschlecht~Auss_ord,length) 

length允許所得到的數據幀與0/1被填充爲與「Auss_ord」而生成的列

0

重新創建數據

politik <- read.table(text="Vorname Nachname ID Fraktion Reli Geschlecht Auss_ord 
     Jan  Aken 1627 'Die Linke'   NA    Männlich           'Auswärtiger Ausschuss' 
     Jan  Aken 1627 'Die Linke'  NA    Männlich  'Gremium nach § 23c Absatz 8 des Zollfahndungsdienstgesetzes' 
     Stephan  Albani 1769 'CDU/CSU'   NA   Männlich 'Ausschuss für Bildung, Forschung und Technikfolgenabschätzung'", 
header = TRUE) 

答使用tidyr傳播

library(dplyr) 
library(tidyr) 
politik %>% 
    mutate(present = TRUE) %>% 
    spread(Auss_ord, present) 

    Vorname Nachname ID Fraktion Reli Geschlecht 
1  Jan  Aken 1627 Die Linke NA Männlich 
2 Stephan Albani 1769 CDU/CSU NA Männlich 
    Ausschuss für Bildung, Forschung und Technikfolgenabschätzung 
1               NA 
2               TRUE 
    Auswärtiger Ausschuss 
1     TRUE 
2     NA 
    Gremium nach § 23c Absatz 8 des Zollfahndungsdienstgesetzes 
1              TRUE 
2               NA 

要知道,你的列名會很辛苦,現在來操縱。在傳播之前重新命名Auss_ord以及一些簡短的縮寫可能會更好。

相關問題