2017-01-18 27 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以及一些简短的缩写可能会更好。

相关问题