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

Turn unique values into new columns and check for all other values

感谢@hrbrmstr,我得到了一个很好的解决“”问题的方法。

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

现在我得到了以下data-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" 天气另一个 object 具有相同的值.

这样...

     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")

...但我没有得到任何正确的结果,除了(对我而言)检查值的唯一性的非常棘手的实现

你可以这样做:

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

length 将允许用 "Auss_ord"

生成的列用 0/1 填充结果数据框

重新创建数据

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 spread 回答

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 可能更好。