demodf <- data.frame(
name = c("Mike","Mike","Mike","Mike","Mike","Joe","Joe","Joe","Joe","Joe"),
Field = c("EDUCATION","Degree","Title","WORK", "Title", "EDUCATION","Degree","Title", "WORK","Title"),
Values = c("EDUCATION", "Masters", "Student", "WORK", "VP Sales", "EDUCATION", "Bachelors","Student", "WORK", "Analyst"))
name Field Values
1 Mike EDUCATION EDUCATION
2 Mike Degree Masters
3 Mike Title Student
4 Mike WORK WORK
5 Mike Title VP Sales
6 Joe EDUCATION EDUCATION
7 Joe Degree Bachelors
8 Joe Title Student
9 Joe WORK WORK
10 Joe Title Analyst
Je veux tidyr::spread
ou reshape2::dcast
en grand format, où Field
devient les en-têtes de colonnes. Ce code ressemblerait à dcast(demodf, name ~ Values)
ou demodf %>% spread(Field, Values)
. Cependant, dcast
génère une valeur numérique et spread
génère une erreur.données Tidy et coulé avec en-têtes Coincé dans les lignes
Le problème est que "Titre" se répète. Vous pouvez voir qu'en raison d'une bizarrerie dans les données, nous avons EDUCATION et WORK comme "faux" en-têtes dans les données. Est-il possible d'étiqueter chaque entrée Field
avec l'en-tête en majuscule afin que dcast
fonctionne (c'est-à-dire Title_EDUCATION
et Title_WORK
)? Et il serait encore mieux d'appliquer cette transformation à l'ensemble Field
, donc "EDUCATION" et "WORK" disparaissent tous ensemble, et il nous reste Degree_EDUCATION, TITLE_EDUCATION
... etc).
Notez qu'il ya beaucoup plus d'en-têtes dans les données réelles, il serait donc préférable d'identifier les « faux têtes » comme les entrées toutes capitalisations, ou les entrées où Field == Values
sortie souhaitée:
output <- data.frame(
Name=c("Mike", "Joe"),
Degree_EDUCATION =c("Masters", "Bachelors"),
Title_EDUCATION = c("Student", "Student"),
Title_WORK= c("VP Sales", "Analyst"))
Name Degree_EDUCATION Title_EDUCATION Title_WORK
1 Mike Masters Student VP Sales
2 Joe Bachelors Student Analyst
fantastique, merci. Le bit 'mutate' pour assigner le tag' IsCategory' est un truc génial. – Mako212