Je cherche désespérément à créer un data frame à partir de données que je récupère de fichiers XML. Le but est d'extraire plusieurs informations de chaque fichier XML.
Le tableau que je souhaite obtenir serait semblable à celui-ci :
Code : Tout sélectionner
tab_final
Nom Naissance Fonction Responsable_de
1 Serge 1945 Directeur NA
2 Marie 1986 Adjointe de direction Fabrice
3 Marie 1986 Adjointe de direction Julie
4 Jean 1990 Directeur financier Mickael
5 Jean 1990 Directeur financier Dominique
6 Jean 1990 Directeur financier Patrice
7 Anne 1972 Analyste NA
tab_final <- structure(list(nom = structure(c(4L, 3L, 3L, 2L, 2L, 2L, 1L), .Label = c("Anne",
"Jean", "Marie", "Serge"), class = "factor"), naissance = c(1945,
1986, 1986, 1990, 1990, 1990, 1972), fonction = structure(c(3L,
1L, 1L, 4L, 4L, 4L, 2L), .Label = c("Adjointe de direction",
"Analyste", "Directeur", "Directeur financier"), class = "factor"),
Nmoins1 = structure(c(NA, 2L, 3L, 4L, 1L, 5L, NA), .Label = c("Dominique",
"Fabrice", "Julie", "Mickael", "Patrice"), class = "factor")), class = "data.frame", row.names = c(NA,
-7L))
Pour obtenir cela j'utilise une boucle (mais d'après ce que j'ai lu, dans R, les boucles c'est pas super...). Je n'arrive pas à obtenir plusieurs lignes pour une même personne. Ma boucle va avoir tendance à me retourner le tableau suivant (avec la dernière itération pour chaque personne):
Code : Tout sélectionner
tab_final
Nom Naissance Fonction Responsable_de
1 Serge 1945 Directeur NA
2 Marie 1986 Adjointe de direction Julie
3 Jean 1990 Directeur financier Patrice
4 Anne 1972 Analyste NA
J'ai essayé d'imbriquer deux boucles comme ci-dessous mais je n'arrive pas à trouver le moyen de placer la dimension j dans les vecteurs (par exemple Nom[i] qui devrait contenir j)
Code : Tout sélectionner
for (i in 1:n) {
for (j in 1:length(xml_find_all(Direction[[i]],"items/items"))) {
Nom[i] = xml_text(xml_find_all(Direction[[i]], ".//nom")[j])
Naissance[i] = xml_text(xml_find_all(Direction[[i]], ".//naissance")[j])
Fonction[i] = xml_text(xml_find_all(Direction[[i]], ".//fonction")[j])
Responsable_de[i] = xml_text(xml_find_all(Direction[[i]], ".//responsabilite")[j])
}
test = as.data.frame(cbind(Nom,Naissance,Fonction,Responsable_de))
}
Je suis preneur de toute solution, avec ou sans boucle si il est possible d'utiliser des fonctions R pour cela.
Merci beaucoup !
Théo