Sto leggendo in un file di dati che assomiglia a questo:Tecnica per la ricerca di dati non corretti in read.csv in R
userId, fullName,email,password,activated,registrationDate,locale,notifyOnUpdates,lastSyncTime,plan_id,plan_period_months,plan_price,plan_exp_date,plan_is_trial,plan_is_trial_used,q_hear,q_occupation,pp_subid,pp_payments,pp_since,pp_cancelled,apikey
"2","John Smith,"[email protected]","a","1","2004-07-23 14:19:32","en_US","1","2011-04-07 07:29:17","3",\N,\N,\N,"0","1",\N,\N,\N,\N,\N,\N,"d7734dce-4ae2-102a-8951-0040ca38ff83"
ma il file effettivo come intorno 20000 record. Io uso il seguente codice R per leggerlo in:
user = read.csv("~/Desktop/dbdump/users.txt", na.strings = "\\N", quote="")
E la ragione per cui ho quote=""
è perché senza di essa l'importazione ferma prematuramente. Finisco con un totale di 9569 osservazioni. Perché non capisco perché esattamente il quote=""
risolve questo problema, è sembra farlo.
Tranne che introduce altri problemi che devo "risolvere". Il primo che ho visto è che le date finiscono per essere stringhe che includono le virgolette, che non si vogliono convertire in date reali quando io uso to.Date()
su di esse.
Ora potevo sistemare le corde e incastrarmi. Ma meglio sapere di più su quello che sto facendo. Qualcuno può spiegare:
- Perché il
quote=""
fissare i 'cattivi' dei dati - Che è una tecnica di best-practice per capire che cosa sta causando il
read.csv
per fermare presto? (Se guardo i dati di input a +/- la riga indicata, non vedo nulla di sbagliato).
Queste sono le righe "vicine" al "problema". Non vedo il danno, vero?
"16888","user1","[email protected]","TeilS12","1","2008-01-19 08:47:45","en_US","0","2008-02-23 16:51:53","1",\N,\N,\N,"0","0","article","student",\N,\N,\N,\N,"ad949a8e-17ed-102b-9237-0040ca390025"
"16889","user2","[email protected]","Gaspar","1","2008-01-19 10:34:11","en_US","1",\N,"1",\N,\N,\N,"0","0","email","journalist",\N,\N,\N,\N,"8b90f63a-17fc-102b-9237-0040ca390025"
"16890","user3","[email protected]","boomblaadje","1","2008-01-19 14:36:54","en_US","0",\N,"1",\N,\N,\N,"0","0","article","student",\N,\N,\N,\N,"73f31f4a-181e-102b-9237-0040ca390025"
"16891","user4","[email protected]","mytyty","1","2008-01-19 15:10:45","en_US","1","2008-01-19 15:16:45","1",\N,\N,\N,"0","0","google-ad","student",\N,\N,\N,\N,"2e48e308-1823-102b-9237-0040ca390025"
"16892","user5","[email protected]","08091969","1","2008-01-19 15:12:50","en_US","1",\N,"1",\N,\N,\N,"0","0","dont","dont",\N,\N,\N,\N,"79051bc8-1823-102b-9237-0040ca390025"
* Aggiornamento *
E 'più difficile. Anche se il numero totale di righe importate è 9569, se guardo le ultime righe corrispondono alle ultime righe di dati. Pertanto suppongo che durante l'importazione qualcosa sia accaduto per causare un sacco di righe da saltare. Infatti 15914 - 9569 = 6345 record. Quando ho la citazione = "" lì ottengo 15914.
Quindi la mia domanda può essere modificata: C'è un modo per ottenere read.csv per segnalare le righe che decide di non importare?
* UPDATE 2 *
@Dwin, ho dovuto togliere na.strings = "\ n" perché la funzione count.fields non lo consente. Con ciò, ottengo questo risultato che sembra interessante ma non lo capisco.
3 4 22 23 24
1 83 15466 178 4
tuo secondo comando produce un sacco di dati (e si ferma al raggiungimento max.print). Ma la prima riga è questo:
[1] 2 4 2 3 5 3 3 3 5 3 3 3 2 3 4 2 3 2 2 3 2 2 4 2 4 3 5 4 3 4 3 3 3 3 3 2 4
Il che non capisco se l'uscita è dovrebbe mostrare quanti campi ci sono in ogni record di input. Chiaramente le prime linee hanno tutti più di 2,4,2 campi ecc ... Mi sento come se mi stavo avvicinando, ma ancora confuso!
Puoi mostrarci come sono i dati prima di 'quote =" "' e dopo? Oppure, puoi pubblicare qualche riga in più dei tuoi dati, preferibilmente alcuni "sani" e alcuni negativi? In breve, puoi fare un esempio riproducibile? –
Io voto per le virgolette incorporate! – Justin
@roman: il problema è che non so dove siano i dati cattivi. Posso mostrarti le righe +/- 9569 e forse vedrai cosa mi manca. – pitosalas