2010-02-18 9 views
10

Ho utilizzato surveygizmo che è un presentatore di questionario online incredibilmente potente. I dati possono essere esportati come file CSV ma purtroppo ha due [non uno] file di intestazione. La prima riga specifica la domanda e la seconda riga contiene le possibili risposte che il rispondente avrebbe potuto spuntare. Questo sembra altamente aberidente nel mondo della lettura e della scrittura dei dati, ma sembra abbastanza normale nel mondo del sondaggio. Come si legge un tale file in R?Lettura in file con due righe di intestazione

Surveygizmo utilizzato per avere un formato di esportazione "vecchio" mette tutto in una riga ma ho avuto problemi ultimamente che il sito Web non lo esporterà. Surveygizmo non è realmente interessato al formato "vecchio" poiché è di 2 generazioni fa e non vogliono supportarlo.

In una semplice indagine uno stagista che stava aiutando me era in grado di superare il problema con il seguente codice

#Read csv file with two rows of headers 
#Append the second row to the first row 
df <-read.csv(csvfile,skip=1,stringsAsFactors=FALSE) #Read csv without any header 
hl=readLines(csvfile, 2)   #Read the two header lines as char strings 
hl=strsplit(hl,',')     #Split headers up by commas 
colnames(df)=sub('_$','',paste(hl[[1]],hl[[2]],sep="")) #join second row to first row 

Tuttavia, con un sondaggio più lungo con più domande e con le domande più (e quindi la le intestazioni sono più lunghe) il nostro metodo di forza bruta sopra non funziona.

Alla fine voglio un frame di dati con intestazioni di colonna che poi si fonderà con un altro frame di dati proveniente da un sondaggio di follow-up. Qualche riferimento online che tratti questo problema?

Ecco un esempio del file csv con due righe di intestazione. La terza e ultima riga è la prima riga di dati. Ho cambiato tutto ciò che riguarda le informazioni sulla salute privata. Le intestazioni sono molto molto lunghe da quando il sondaggio gizmo ha usato l'intera domanda come intestazione.

"","","","","","","","","","Inclusion Criteria I or my child is a patient with recurrent respiratory papillomatosis (RRP)How do you know that you or your child has RRP? Please check whatever is true.","","","Exclusion Criteria Do any of the following apply? Please put a check next to any condition that is present.In the unlikely event that one of the following conditions apply, then unfortunately we cannot enroll you in this study. You could stop or you could carry on telling us about yourself, whichever you prefer. ","","Confused or have questions?If you are confused about any items or if you want us to clarify something then here is the place that you can express yourself freely. Also, you can call us at (412) 567-7870 or at (888) 887-7729.You are encouraged to review the consent form. You do not have to sign it now but you will need to do so once we enroll you. ","Please tell us who you are - referring to you, the person completing the form. Different people feel differently about their privacy and about how they are contacted. We will do our utmost to protect your privacy. Please do not give us your e-mail address if you do not want us to use it. Remember that e-mail should be private but is not always so. The safest way to think about it is as if e-mail was similar to a post card. Please do not give us a telephone number you do not want us to contact you on.","","","","","","","","","","","Who are you? Are you the patient or a parent or someone else?","When was the person with RRP born?Enter the date as MM/DD/YYYY","Approximately when was RRP diagnosed? This can be very approximate. If you do not remember the date then please put down your best guess. We will use it to work out how old the patient was when he or she was diagnosed. Enter the date as MM/DD/YYYY.","Has the patient with RRP ever received Gardasil? Gardasil is a vaccine against HPV 6, 11, 16 and 18 that was approved by the Food and Drug Administration (FDA) for use in females to prevent gynecologic diseases. ","Please ignore this question. It is for our internal tracking. Are you?","gender","race","Has there been human contact? By e-mail or by telephone or by anything in which we discussed informed consent","What is the subject number?","Merck Research Laboratory Accession Number?","Second Merck Accession Number?","FedEx Tracking Number","Date Shipped Out","Date EMSI Notified" 
"Response ID","RespondantKey","Edit Link","IP","Date Started","Date Finished","Status","Linked From","Comments","histopathconfirm","surgeonseaid","other","cancer","none","","First Name","Last Name","Street Address","Apt/Suite/Office","City","State","Postal Code","Country","Email Address","Phone Number","Mobile Phone","","","","","","","","","","","","","","" 
"6990181","4099941","http://s-gtzd7-14166.sgizmo.com/?edit=6770181&cc=e246ecb7095b983xxxxx7ec0a9","1991.157.178.134","2009-04-30 07:57:24","2009-04-15 14:56:01","Submitted","","Spoke to her Thursday, 20 Apr 2009 20:26. No questions ready to go.09/11/2009 consent mailed..mrs accession number 304074333811wp, 01wp SFJB06123 Fedex tracking 865888887357 sent Tues April 29; called her Thurs, 10 May 2009 20:21 she will sign slip","histopathconfirm","surgeonseaid","","","none","","Jane","Doe","23 Hastings Rd","29th floor","Oranje","ny","27935","USA","[email protected]","728-850-7252","626-922-2239","Patient","02/21/1965","01/01/1976","No","Key Person","","","Yes","SFJB06123","304033385811wp","303334485801wp","865333807357","4/11/2007","4/11/2007" 
+2

Sarà utile se si potesse creare un collegamento ad un file di esempio e spiegare cosa si intende con il suddetto metodo non funziona. –

+1

Non riesco a vedere il motivo dell'uso di 'sub' nell'ultimo comando. Vorrei usare: colnames (df) = paste (hl [[1]], hl [[2]], sep = "_") –

+1

Mi piacerebbe semplicemente incollare il mio intero file CSV per farvi vedere il problema. Sfortunatamente è caricato con informazioni sulla salute privata, quindi dovrei dedicare un po 'di tempo a disinfettare il file. Forse inserirò le prime 3 righe del file csv e altererò la prima riga di dati. È possibile allegare file in stackoverflow? – Farrel

risposta

4

Perché non solo hanno read.csv leggere nella riga prima intestazione (che sono le intestazioni effettive come ho capito la tua domanda) quindi passare alla riga successiva:

read.csv(file, header=T, skip=1) 

alternativa , se la seconda riga di intestazione inizia con un carattere idiosincratico (non presente nei dati), è possibile specificare tale riga come riga di commento passando il carattere che inizia la riga come valore dell'argomento comment.char (se quella linea ha cominciato w/"#", per esempio, sarebbe) ::

read.csv(file, header=T, comment.char="#") 
+0

Non è possibile saltare la seconda riga. La seconda riga a volte è l'intestazione. Per diverse colonne l'intestazione si trova nella seconda riga. Vedi i dati che ho modificato nella mia domanda originale. – Farrel

+0

Downvoted perché questa risposta non si adatta ai criteri indicati nella domanda. Salta interamente su una delle due righe di intestazione. –

+0

-1 La descrizione del primo esempio di codice qui è errata. Questo salterà la prima riga dei dati e * quindi * inizierà a leggere. Quindi l'intestazione sarebbe dalla riga 2. "skip" funziona prima che avvenga qualsiasi lettura. Penso che questa risposta debba essere cancellata poiché questa domanda è ora (quasi) chiusa e ci sono risposte migliori (ad esempio, quelle di @ DWin) nell'altra pubblicazione. –

0

In realtà penso che il modo più semplice per farlo è utilizzare l'esportazione SurveyGizmo SPSS, invece. Esportare i dati in SPSS e quindi utilizzare un comando simile a R a:

read.spss (file = 'mydata.sav')

Questo dovrebbe effettivamente funzionare perfettamente per voi e portare tutti i dati descrizione in R come bene.

Mi dispiace per la confusa telefonata che hai avuto ieri. È vero, ci stiamo impegnando a fondo per non tornare indietro e correggere la vecchia, vecchia e vecchia esportazione CSV. Tuttavia, non è che non vogliamo supportare le esportazioni di intestazione singola. Nella versione 3, la "Esportazione rapida" attiva al momento è una singola colonna esportata e rimarrà tale, ufficialmente supportata.

Purtroppo la versione precedente di questa esportazione è troppo lontana e non ottimizzata per poterla aggiornare per funzionare con alcuni dei browser più moderni. Soprattutto perché le nuove esportazioni mancano solo poche settimane. Mi dispiace se la telefonata era in qualche modo poco chiara o poco professionale.

In questo caso, l'esportazione SPSS è la strada da percorrere! Se non disponi di un livello di piano che ti offre l'opzione di esportazione, invia semplicemente e-mail (o chiama) il supporto e indirizzali a questo post. Aggiungeranno l'esportazione al tuo account.

Cheers,

-Christian Vanek
CTO & co-fondatore
SurveyGizmo

+0

Ho provato ad utilizzare il pacchetto straniero per accedere al comando read.spss Ma ahimè mi ha colpito errori > initialspss <-read.spss (file = "20.100.222,180259 millions-InitialScreen.sav") Messaggio di Attenzione: In read.spss (file = "20100222180259-InitialScreen.sav"): 20100222180259-InitialScreen.sav: tipo di record non riconosciuto 7, sottotipo 14 riscontrato nel file di sistema Ho provato ad andare alla versione 3. Sono corretto nel dedurre che posso copiare un sondaggio in versione 3 ma i dati inseriti originariamente rimangono nella versione 2 in cui non vi è alcuna esportazione rapida. Per favore, rinnegami di qualsiasi idea sbagliata. – Farrel

Problemi correlati