Ho un semplice file CSV denominato "test.csv" con il seguente contenuto:come saltare la lettura alcune colonne in readr
colA,colB,colC
1,"x",12
2,"y",34
3,"z",56
Diciamo che voglio saltare la lettura di Cola e appena letto in colB e colC. Voglio un modo generale di farlo perché ho molti file da leggere e talvolta colA è chiamato qualcos'altro, ma colB e colC sono sempre gli stessi.
Secondo la documentazione read_csv, un modo per raggiungere questo obiettivo è quello di passare un elenco chiamato per col_types e nominare solo le colonne che si desidera conservare:
read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric()))
da non menzionare la cola dovrebbe ottenere eliminato dalla produzione. Tuttavia, il frame di dati risultante è:
Source: local data frame [3 x 3]
colA colB colC
1 1 x 12
2 2 y 34
3 3 z 56
sto facendo qualcosa di sbagliato o è la documentazione read_csv non è corretta? Secondo il file della guida:
Se un elenco, deve contenere un "raccoglitore" per ogni colonna. Se si si desidera solo leggere un sottoinsieme delle colonne, è possibile utilizzare un elenco con nome (dove i nomi forniscono i nomi delle colonne). Se una colonna non è menzionata per nome , non sarà inclusa nell'output.
'' fread' di data.table' ha 'drop' e argomenti 'select' per questo scopo, per riferimento – MichaelChirico
@jaap, NON un duplicato. Questa domanda riguarda readr :: read_csv() e l'altra domanda riguarda utils :: read.table(). – Angelo
@ Angelo Sì, lo è. La domanda collegata riguarda la lettura di un numero limitato di colonne. Al momento della stesura di quella domanda, 'readr :: read_csv' non esisteva nemmeno. Nel frattempo è stata aggiunta come risposta (da me) per fornire approcci alternativi a 'read.table' /' read.csv' e può quindi servire come target duplicato. – Jaap