将唯一值转换为新列并检查所有其他值

时间:2017-01-18 12:46:55

标签: r dataframe reshape dcast

感谢@hrbrmstr我为" Scraping a xml document (nested url-structure)"提供了一个真正好的解决方案。问题

但是由于这种洞察力,它出现了另一个问题:

现在我有了以下数据结构...

cur = new Date(); // current date
tx.executeSql('SELECT * FROM easyPicture WHERE strftime('%Y-%m-%d', 'creation_date') > ?', (cur.getFullYear()+'-'+(cur.getMonth()+1)+'-'+cur.getDate()), function (tx, results) {});

实际变化的唯一变量是" Auss_ord"其中包含MP的不同佣金作为价值。

现在,我想要实现的是从当前的长版本切换到数据帧的宽版本。

对于" Auss_ord"中的每个唯一值(特定文本字符串)应该有一个新列,如果它是" True"天气另一个物体具有相同的值。

那样......

 $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" ...

......应该变成......

Example Dataframe (wide version)

我尝试过重塑像

这样的操作
     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

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

...但除了(对我来说)检查值的唯一性真的很棘手的实现之外,我没有得到任何正确的结果

2 个答案:

答案 0 :(得分:0)

你可以这样做:

dcast(df,Vorname+Nachname+ID+Fraktion+Reli+Geschlecht~Auss_ord,length)
对于使用“Auss_ord”生成的列,

length将允许生成的数据帧填充0/1

答案 1 :(得分: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可能更好。