2017-10-09 2 views
1

Ich möchte die Spread-Funktion tidyr verwenden, um einen Datenrahmen mit mehreren IDs in den Zeilen und mehreren Spalten in ein df mit einer Zeile zu konvertieren, wo wir Indikatorspalten für alle Kombinationen haben von IDs und Kategorien. Wenn dplyr und tidyr nicht die geeignetste Option ist, öffnen Sie andere Spread-ähnliche Funktionen.Zeilen in Spalten mit mehreren Kategorien transponieren dplyr

Im folgenden Skript kann ich nur 1 Spalte als das Wertpaar angeben. Ich möchte cat1 und cat2 als Wertspalten haben. Auch ich würde die Feldnamen wie zu sein "sentid1_cat1, sentid1_cat2" usw.

test.df <- data.frame(sentid = 1:3, 
         cat1 = c(1,0,0), 
         cat2 = c(0,1,0)) 

test.df %>% 
    spread(key = sentid, value = cat1, sep = '_') 

EDIT

gewünschte Ausgabe:

output.df <- data.frame(sentid1_cat1 = 1, 
         sentid1_cat2 = 0, 
         sentid2_cat1 = 0, 
         sentid2_cat2 = 1, 
         sentid3_cat1 = 0, 
         sentid3_cat2 = 0) 
+1

Ich bin ein wenig unsicher, was Sie fordern. Macht es Ihnen etwas aus, eine Ausgabe df einzutragen, wie das gewünschte Ergebnis aussehen würde? –

+0

Vielleicht [dieser Beitrag] (https://stackoverflow.com/questions/30592094/r-spreading-multiple-columns-with-tidyr) wird hilfreich sein. Es wäre hilfreich, wenn Sie Ihre gewünschte Ausgabe zeigen. – lmo

+0

Löst meine Antwort Ihr Problem? – useR

Antwort

3

Eine Lösung mit dplyr + tidyr:

library(dplyr) 
library(tidyr) 

test.df %>% 
    gather(variable, value, -sentid) %>% 
    unite(variable, sentid, variable) %>% 
    mutate(variable = paste0("sentid", variable)) %>% 
    spread(variable, value) 

Ergebnis:

sentid1_cat1 sentid1_cat2 sentid2_cat1 sentid2_cat2 sentid3_cat1 sentid3_cat2 
1   1   0   0   1   0   0 
Verwandte Themen