2010-02-18 13 views
10

He estado usando surveygizmo que es un presentador de cuestionario en línea increíblemente poderoso. Los datos se pueden exportar como un archivo csv, pero lamentablemente tiene dos [no una] cabeceras. La primera fila especifica la pregunta y la segunda fila contiene posibles respuestas que el encuestado podría haber marcado. Esto parece altamente concluyente en el mundo de lectura y escritura de datos, pero parece bastante normal en el mundo de la encuesta. ¿Cómo se lee uno de esos archivos en R?Lectura en archivos con dos filas de encabezado

Surveygizmo solía tener un formato de exportación "anterior" que ponía todo en una sola fila, pero he tenido problemas últimamente de que el sitio web no lo exportará. Surveygizmo no está realmente interesado en el formato "antiguo" ya que es hace 2 generaciones y no quieren apoyarlo.

En una encuesta sencilla un interno que me estaba ayudando era capaz de superar el problema con el siguiente código

#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 

Sin embargo, con una encuesta más larga con más preguntas y las preguntas son más largos (y por tanto la los encabezados son más largos) nuestro método de fuerza bruta anterior no está funcionando.

Al final quiero un marco de datos con encabezados de columna que luego fusionaré con otro marco de datos proveniente de una encuesta de seguimiento. ¿Alguna referencia en línea que se ocupe de este problema?

Aquí hay un ejemplo del archivo csv con dos filas de encabezado. La tercera y última fila es la primera línea de datos. Cambié todo lo relacionado con la información de salud privada. Los encabezados son muy, muy largos, ya que el gizmo de encuesta utilizó toda la pregunta como encabezado.

"","","","","","","","","","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

Será útil si se pudiera enlazar a un archivo de ejemplo y explicar qué quiere decir con el método anterior no funciona. –

+1

No puedo ver el motivo de usar 'sub' en el último comando. Yo usaría: colnames (df) = pegar (hl [[1]], hl [[2]], sep = "_") –

+1

Me encantaría pegar todo mi archivo csv para que veas el problema. Lamentablemente, está cargado con información de salud privada, así que tendría que pasar bastante tiempo desinfectando el archivo. Tal vez solo publique las primeras 3 líneas del archivo csv y altere la primera fila de datos. ¿Se pueden adjuntar archivos en stackoverflow? – Farrel

Respuesta

4

¿Por qué no tienen read.csv leen en la primera fila de cabecera (que son las cabeceras actuales, entiendo su pregunta) y luego saltar la fila siguiente:

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

Alternativamente , si esa segunda línea de encabezado comienza con un carácter idiosincrásico (no se encuentra en sus datos), puede especificar esa línea como línea de comentario pasando el carácter que comienza la línea como el valor del argumento comment.char (si esa línea comenzó w/"#", por ejemplo, sería) ::

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

No se puede omitir la segunda fila. La segunda fila es a veces el encabezado. Para varias columnas, el encabezado está en la segunda fila. Ver los datos que edité en mi pregunta original. – Farrel

+0

Downvoted porque esta respuesta no coincide con los criterios que figuran en la pregunta. Se salta por completo una de las dos filas de encabezado. –

+0

-1 La descripción del primer ejemplo de código aquí es incorrecta. Esto omitirá la primera línea de los datos y * luego * comienza a leer. Por lo tanto, el encabezado sería de la Línea 2. 'skip' opera antes de que tenga lugar cualquier lectura. Creo que esta respuesta se debe eliminar ya que esta pregunta está (casi) cerrada y hay respuestas mejores (por ejemplo, @DWin) en la otra publicación. –

0

En realidad creo que la forma más sencilla de hacerlo es utilizar la exportación SurveyGizmo SPSS en su lugar. Exportar los datos a SPSS y luego utilizar un comando similar en I a:

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

Que en realidad debería funcionar perfectamente para usted y llevar todos los datos de descripción en R como bien.

Lamento la confusa llamada telefónica que tuvo ayer. Es cierto, estamos tratando de no volver atrás y corregir la antigua, vieja y vieja exportación de CSV. Sin embargo, no es que no deseemos admitir exportaciones de encabezado único. En la versión 3, la "Exportación rápida" que está activa en este momento es una exportación de una sola columna y seguirá siendo así: oficialmente compatible.

Lamentablemente, la versión anterior de esta exportación está demasiado retirada y no optimizada como para poder actualizarla para que funcione con algunos de los navegadores más modernos. Especialmente porque la nueva exportación está a solo unas semanas de tomar el control. Lo siento si la llamada telefónica no fue clara o poco profesional.

En este caso, ¡SPSS Export es el camino a seguir! Si no tiene un nivel de plan que le brinde esa opción de exportación, solo envíe un correo electrónico (o llame) a asistencia técnica y apúntelos a esta publicación. Agregarán la exportación a su cuenta.

Saludos,

-Christian Vanek
CTO & cofundador
SurveyGizmo

+0

He intentado utilizar el paquete exterior para acceder al comando read.spss Pero, por desgracia golpeo errores > initialspss <-read.spss (file = "20100222180259-InitialScreen.sav") mensaje Advertencia: En read.spss (file = "20100222180259-InitialScreen.sav"): 20100222180259-InitialScreen.sav: Registro no reconocido tipo 7, subtipo 14 encontrado en el archivo del sistema Traté de ir a la versión 3. Estoy en lo cierto al deducir que puedo copiar una encuesta a versión 3 pero sus datos ingresados ​​originalmente permanecen en la versión 2 donde no hay exportación rápida. Por favor, desmiente cualquier concepto erróneo. – Farrel