2016-03-23 2 views
-2

J'ai un dataframe avec 8 variables:Comment transférer plusieurs facteurs dans une rangée?

enter image description here

Pour la Labor Category variable, on a 5 facteurs: Holiday Travaillé, régulier, heures supplémentaires, Formation, Autres A travaillé.

La question est: Puis-je trouver un moyen de regrouper les lignes avec les mêmes valeurs, sauf Labor Category et résumer la variable Sum_FTE

-à-dire Peut-on réduire le nombre de lignes en ajouter plusieurs colonnes:

" Labor.CategoryHoliday.Worked "," Labor.CategoryOther.Worked "," Labor.CategoryOvertime "," Labor.CategoryRegular "," Labor.CategoryTraining "et utilisez 0 ou 1 pour indiquer le statut de chaque facteur. Et résumez ensuite l'ETP total à partir des lignes avec les mêmes valeurs sauf la catégorie Travail.

enter image description here

Répondre

0

Nous pouvons faire l'un des groupes par les opérations. En utilisant dplyr, nous spécifions les noms de colonnes dans les variables de regroupement group_by, puis obtenons le sum de "Sum_FTE" avec summarise.

library(dplyr) 
df1 %>% 
    group_by_(.dots= names(df1)[c(1:2,4:5)]) %>% 
    summarise(TotalFTE= sum(Sum_FTE)) 

Pour la deuxième partie de la question, nous pouvons utiliser dcast (il aurait été préférable de montrer l'ensemble de données avec dput au lieu de fichier image)

library(data.table) 
setDT(df1)[, N := 1:.N, (Labor.Category)] 
dcast(df1, Med.Center+Charged.Job+Month+Pay.Period.End ~N, 
      value.var="Labor.Category, length) 
+0

Merci pour votre bien vouloir répondre . Mais pour la deuxième partie, j'ai créé plus de 20 000 nouvelles variables, ce qui indique que c'est incorrect. –

+0

@BeichenLin La deuxième partie, j'avais aussi des doutes, car je ne pouvais pas le tester sans un bon exemple. Vous avez posté une image, à partir de cela, il est difficile de créer un exemple de travail. Pouvez-vous mettre à jour votre message avec la sortie 'dput' de l'exemple i ..' dput (droplevels (head (vosdata, 10))) 'et la sortie attendue basée sur cet exemple. – akrun