2016-04-14 9 views
0

Ich brauche Hilfe bei der Organisation einer Reihe von Umfragefragen, die in Form eines CSV kam. Die CSV ist in diesem Format. Sagen Sie, dass Umfrage Frage 1 mehrere Antworten zur Auswahl hat, wie (a, b, c, d). In der CSV würde es so aussehen.R: Gruppieren eines Datenrahmens von Sätzen und Identifizieren, welche Spalten ähnliche Teilstrings teilen.

respondent Q1 Q1 Q1 Q1 
1   a 
2    b  
3     c 
4     d 
5    b 

Die Ausgabe von Q1 ist für jede mögliche Antwort auf verschiedene Spalten verteilt. Ich möchte dies konvertieren:

respondent Q1 
1   a 
2   b  
3   c 
4   d 
5   b 

Mein Problem ist nicht mit ihm zusammen Stapeln, ich meine, ich habe das noch nicht herausfinden, aber ich denke, dass ich die Ressourcen dafür, dass finden.

Mein Problem ist, dass nicht alle Umfragefragen diesem Format folgen. Also Q2 kann 6 Spalten, Q3 nur eine Spalte usw.

Eine mögliche Lösung und die, auf die ich zurückgreifen müsste, wenn ich nichts besseres habe, ist hart zu codieren und zu zählen, wie viele Spalten zu jeder Frage gehören und Gehen Sie durch die csv, Teilmenge für diese Fragen und organisieren Sie sie in einzelne Spalte.

Dies ist eine machbare Lösung, aber ich würde es vorziehen, wenn ich nicht wie 20 etwas Fragen zu sehen. Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, die Fragen zusammenzufassen/zu gruppieren.

Die Spaltennamen für Q1 sind nicht genau gleich, aber sehr ähnlich. Zum Beispiel:

Q1. Wie fühlst du dich heute? -Gut.

Q1. Wie fühlst du dich heute? -Schlecht.

Grundsätzlich möchte ich die Aufgabe erleichtern, herauszufinden, wie viele Spalten zu Q1 gehören, wie viele zu Q2. Ist es möglich, die Ähnlichkeit der zu derselben Frage gehörenden Spaltenüberschriften zu verwenden und zu sagen, dass diese 5 Spalten zu derselben Frage gehören.

Danke!

Antwort

1

davon aus, dass Ihre Umfrageergebnisse alle in einer einzigen Datei wie diese temp.csv sind:

respondent,Q1,Q1,Q1,Q1,Q2,Q2,Q3,Q4,Q4,Q4 
1,a,,,,a,,a,,b, 
2,,b,,,,b,a,a,, 
3,,,c,,a,,a,,,c 
4,,,,d,,b,a,,b, 
5,,b,,,,b,a,,b, 

dieser Code unten sollten Sie bekommen, was Sie wollen

library(dplyr) 
survey <- read.csv("temp.csv",header=F,row.names=1,check.names=F) 
group_by(data.frame(t(survey), check.names=F), respondent) %>% 
    summarise_each(funs(.[.!=""])) 

##results 
## respondent 1 2 3 4 5 
##1   Q1 a b c d b 
##2   Q2 a b a b b 
##3   Q3 a a a a a 
##4   Q4 b a c b b 

#to get the orientation as what you want 
write.table(t(ans), "answers.csv", sep=",", row.names=T, col.names=F) 
read.csv("answers.csv") 

Wenn jede Frage nur in ist eine andere Datei, Sie können mit lapply alle "temp (QN #). csv" in eine Liste einlesen und diese Dateien rekursiv mit row.names zusammenführen.

0

Betrachten der Basisfunktion apply():

df <- data.frame(df$respondent, 
       Q1=(apply(df, 1, max))) 

# respondent Q1 
# 1   1 a 
# 2   2 b 
# 3   3 c 
# 4   4 d 
# 5   5 b 

Für mehrere Spalten, sollten verbindliche Funktionen gelten mit grep für Spalten ähnliche Namen, die Ihre obige Frage beantwortet:

Ist es möglich, die Ähnlichkeit zu verwenden von Spaltenüberschriften gehören zu die gleiche Frage?

df <- data.frame(df$respondent, 
       Q1=apply(df[,grep('Q1', names(df))], 1, max), 
       Q2=apply(df[,grep('Q2', names(df))], 1, max), 
       Q3=df$Q3,          # ONLY ONE COLUMN (NO APPLY) 
       Q4=apply(df[,grep('Q4', names(df))], 1, max)) 
Verwandte Themen