2017-10-09 6 views
1

Je voudrais utiliser la fonction de propagation de tidyr pour convertir une trame de données avec plusieurs identifiants dans les lignes et plusieurs colonnes en df avec une ligne où nous avons des colonnes indicatrices pour toutes les combinaisons des ID et des catégories. Si dplyr et tidyr n'est pas le plus approprié pour cela, ouvert à d'autres fonctions de propagation.Transposer des lignes en colonnes avec plusieurs catégories dplyr

Dans le script ci-dessous, je ne peux spécifier qu'une colonne comme paire de valeurs. Je voudrais avoir cat1 et cat2 comme colonnes de valeur. Aussi, je voudrais les noms de champ à "sentid1_cat1, sentid1_cat2", etc.

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

sortie souhaitée:

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

Je suis un peu incertain ce que vous demandez. Cela vous dérange-t-il d'inclure une sortie df de ce à quoi ressemblerait le résultat souhaité? –

+0

Peut-être que [cet article] (https://stackoverflow.com/questions/30592094/r-spreading-multiple-columns-with-tidyr) sera utile. Ce serait utile si vous montriez votre sortie désirée. – lmo

+0

Est-ce que ma réponse résout votre problème? – useR

Répondre

3

Une solution avec dplyr + tidyr:

library(dplyr) 
library(tidyr) 

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

Résultat:

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