2010-02-18 17 views
10

Korzystam z ankiety, która jest niesamowicie potężnym internetowym prezenterem ankiet. Dane mogą być eksportowane jako plik csv, ale niestety ma dwa [nie jeden] wiersze nagłówka. Pierwszy wiersz określa pytanie, a drugi wiersz zawiera możliwe odpowiedzi, które respondent mógł odliczyć. Wydaje się to wysoce nieczytelne w świecie odczytu i zapisu danych, ale wydaje się całkiem normalne w świecie ankiet. Jak czytać taki plik w R?Czytanie w plikach z dwoma wierszami nagłówka

Surveygizmo miał kiedyś "stary" format eksportu, w którym wszystko zostało umieszczone w jednym wierszu, ale ostatnio miałem problemy z tym, że witryna nie eksportuje go. Surveygizmo nie jest tak naprawdę zainteresowany "starym" formatem, ponieważ jest 2 pokolenia temu i nie chce go wspierać.

W prostym badaniu stażystą, który pomaga mi udało się przezwyciężyć problem z następującego kodu

#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 

Jednak przy dłuższym badaniu z większą liczbą pytań i pytań jest dłuższa (a tym samym nagłówki są dłuższe) nasza metoda brute force powyżej nie działa.

Na koniec chcę ramkę danych z nagłówkami kolumn, którą następnie scalę z inną ramką danych pochodzącą z ankiety uzupełniającej. Wszelkie referencje online dotyczące tego problemu?

Oto przykład pliku csv z dwoma wierszami nagłówka. Trzeci i ostatni wiersz to pierwsza linia danych. Zmieniłem wszystko, co dotyczy prywatnych informacji o zdrowiu. Nagłówki są bardzo długie od czasu, gdy ankieta z goglami w ankiecie użyła całego pytania jako nagłówka.

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

Będzie to przydatne, jeśli można link do przykładowego pliku i wyjaśnić, co masz na myśli przez powyższą metodą nie działa. –

+1

Nie widzę powodu używania 'sub' w ostatnim poleceniu. Chciałbym użyć: colnames (df) = wklej (hl [[1]], hl [[2]], sep = "_") –

+1

Chciałbym po prostu wkleić mój cały plik csv, aby zobaczyć problem. Niestety jest obciążony prywatnymi informacjami zdrowotnymi, więc musiałbym poświęcić sporo czasu na odkażenie pliku. Może po prostu opublikuję pierwsze 3 wiersze pliku csv i zmienię pierwszy wiersz danych. Czy można dołączyć pliki w stackoverflow? – Farrel

Odpowiedz

4

Dlaczego po prostu nie mają read.csv przeczytać w pierwszym wierszu nagłówka (które są rzeczywiste nagłówki jak rozumiem Twoje pytanie), a następnie przejść do następnego wiersza:

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

Alternatywnie , jeśli ta druga linia nagłówka zaczyna się od znaku idiosynkratycznego (nie znaleziono w danych), możesz określić tę linię jako linię komentarza, przekazując znak, który rozpoczyna linię jako wartość argumentu comment.char (jeśli ta linia zaczęła w/„#” na przykład, byłoby) ::

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

Nie można pominąć drugiego rzędu. Drugi rząd to czasami nagłówek. Dla kilku kolumn nagłówek znajduje się w drugim rzędzie. Zobacz dane, które edytowałem na moje oryginalne pytanie. – Farrel

+0

Rewidowano, ponieważ ta odpowiedź nie pasuje do kryteriów podanych w pytaniu. Pomija całkowicie jeden z dwóch wierszy nagłówka. –

+0

-1 Opis pierwszego przykładu kodu tutaj jest niepoprawny. Spowoduje to pominięcie pierwszego wiersza danych i * następnie * rozpoczęcie czytania. Stąd nagłówek pochodziłby z linii 2. 'skip' działa przed każdym odczytem. Myślę, że ta odpowiedź powinna zostać usunięta, ponieważ to pytanie jest teraz (prawie) zamknięte i są lepsze (np. @ DWin) odpowiedzi na innym wpisie. –

0

Właściwie myślę, że najprostszym sposobem, aby to zrobić jest użycie eksportu SurveyGizmo SPSS zamiast. Eksport danych do SPSS, a następnie użyć podobnego polecenia w R do:

read.spss (plik = „mydata.sav”)

To powinno faktycznie działa idealnie dla ciebie i przynieść wszystkie dane jako opis do R dobrze.

Przykro mi z powodu tego mylącego telefonu, który miałeś wczoraj. To prawda, staramy się nie wracać i naprawiać starego, starego, starego eksportu CSV. Jednak nie chodzi o to, że nie chcemy wspierać eksportu pojedynczych nagłówków. W wersji 3 aktywny obecnie "Szybki eksport" to eksport pojedynczej kolumny i pozostanie w ten sposób - oficjalnie wspierany.

Niestety, starsza wersja tego eksportu jest zbyt daleko usunięta i nieoptymalizowana, aby można było go uaktualnić do pracy z niektórymi nowocześniejszymi przeglądarkami. Zwłaszcza, że ​​nowy eksport jest zaledwie kilka tygodni przed przejęciem. Przykro mi, jeśli telefon był w jakiś sposób niejasny lub nieprofesjonalny.

W tym przypadku SPSS Export jest drogą do zrobienia! Jeśli nie masz poziomu planu, który daje ci opcję eksportu, po prostu poproś o pomoc (lub zadzwoń) i skieruj go do tego posta. Dodadzą eksport do twojego konta.

Cheers,

-Christian Vanek
CTO & Współzałożyciel
SurveyGizmo

+0

Próbowałem przy użyciu pakietu zagranicznym dostępu do komendy read.spss Ale niestety uderzyłem błędy > initialspss <-read.spss (file = "20100222180259-InitialScreen.sav") wiadomość Ostrzeżenie: W read.spss (file = "20100222180259-InitialScreen.sav"): 20100222180259-InitialScreen.sav: Nierozpoznany typ rekordu 7, podtyp 14 napotkany w pliku systemowym Próbowałem przejść do wersji 3. Czy słusznie stwierdzam, że mogę skopiować ankietę do Wersja 3, ale pierwotnie wprowadzone dane pozostają w wersji 2, gdzie nie ma szybkiego eksportu. Proszę, wyrzuć mnie z wszelkich nieporozumień. – Farrel

Powiązane problemy