2016-01-26 4 views
-1

Nous utilisons une application d'enquête tiers qui ne donne que des réponses HTML, que je Grattez ensuite dans des fichiers CSV qui ressemblent à ceci:réponses au sondage format dans la trame de données R bien rangé

2,"Rank features by frequency of use ","AMER","JAPAC","EMEA","Total" 
2.1,"Stored procedures ",,,, 
"Never",,1,2,1,4 
"Sometimes (<50% of applications)",,10,6,5,21 
"Often (>50%)",,7,4,2,13 
"Always",,1,0,0,1 
2.2,"Triggers ",,,, 
"Never"," ",4,3,2,9 
"Sometimes (<50% of applications)"," ",13,9,3,25 
"Often (>50%)"," ",2,0,2,4 
"Always"," ",0,0,1,1 

Ce qui se passe, et a parfois plus de trois réponses. Je voudrais que ce soit dans le « bien rangé » format:

Q.Num, Response, Never, Sometimes, Often, Always, Other.Response, 
2.1, "Stored Procedures", 4, 21, 13, 1 
2.2, "Triggers", 9, 25, 4, 1 

(je peux gérer la cartographie des questions aux numéros ailleurs et amerrissage forcé les données régionales pour l'instant)

Je suppose que je pouvais faire ceci avec une boucle (plus facilement en python), mais j'espère qu'il y a une manière plus "R-like" ...

+0

Regardez 'read.csv()' avec l'argument 'skip', puis sous-créez le résultat data.frame – HubertL

+0

Veuillez publier un extrait de réponses html réelles. R peut certainement analyser cela dans une base de données. – Parfait

Répondre

0

Puisque vous avez demandé un rangé data.frame je pensais que je ferais un pour vous avec le tidyr paquet.

library(tidyr) 
library(dplyr) 

d <- read.csv("path/to/data.csv") 

col_n = head(d$X2, 5)[-1] #Obtaining "Always, Never, Often, Sometimes" 

d_1 <- d[!d$X2 %in% col_n, c("X2", "Rank.features.by.frequency.of.use.")] 

d_2 <- d[d$X2 %in% col_n, !names(d) %in% "Rank.features.by.frequency.of.use."] 

d_2$Q.Num <- rep(d_1$X2, each = length(col_n)) 

d_2$Response <- rep(d_1$Rank.features.by.frequency.of.use., each = length(col_n)) 

d_2 %>% 
    gather(key, value, -Q.Num, -Response, -X2) %>% 
    spread(X2, value) %>% 
    rename(Country = key) 

Cet ensemble de données comprend tous les pays, et non seulement les totaux indiqués dans votre exemple. Cependant, à partir de votre message, il semble que vous ayez besoin de données au niveau du pays.