¿Alguien puede decirme cómo leer solo los primeros 6 meses (7 columnas) para cada año de los datos a continuación, por ejemplo utilizando read.table()
?
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2009 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2010 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2011 -21 -27 -2 -6 -10 -32 -13 -12 -27 -30 -38 -29
NULL
como una clase de columna en su respuesta .Respuestas:
Digamos que los datos están en el archivo
data.txt
, puede usar elcolClasses
argumento deread.table()
para omitir columnas. Aquí los datos en las primeras 7 columnas son"integer"
y configuramos las 6 columnas restantes para"NULL"
indicar que deben omitirseCambie
"integer"
a uno de los tipos aceptados según se detalla en?read.table
función del tipo real de datos.data.txt
Se ve como esto:y fue creado usando
donde
dat
estaSi el número de columnas no se conoce de antemano, la función de utilidad
count.fields
leerá el archivo y contará el número de campos en cada línea.fuente
nrows
. Luego calcule cuántas columnas está usandoncol()
, o de lo contrario desea calcular la cantidad de columnas para leer / ignorar. Luego lea el archivo completo con esta información.count.fields()
que automatiza el proceso que sugerí en los comentarios.count.fields()
una conexión de texto, entonces, lea un subconjunto de las filas usandotxt <- readLines(....)
, luego cree una conexión a la lectura en líneascon <- textConnection(txt)
, luego hagacount.fields(txt)
. Asegúrese de utilizarskip
encount.fields()
saltarse la fila de encabezado si hay uno; no puede omitir filas en el archivo usandoreadLines()
.Para leer un conjunto específico de columnas de un conjunto de datos, hay varias otras opciones:
1) Con
fread
desde eldata.table
paquete:Puede especificar las columnas que desee con el
select
parámetro a partirfread
deldata.table
paquete. Puede especificar las columnas con un vector de nombres de columna o números de columna.Para el conjunto de datos de ejemplo:
Alternativamente, puede usar el
drop
parámetro para indicar qué columnas no deben leerse:Todo resulta en:
ACTUALIZACIÓN: cuando no desee
fread
devolver una tabla de datos , use el parámetro -pordata.table = FALSE
ejemplo:fread("data.txt", select = c(1:7), data.table = FALSE)
2) Con
read.csv.sql
desde elsqldf
paquete:Otra alternativa es la
read.csv.sql
función delsqldf
paquete:3) Con las
read_*
-funciones del -paquetereadr
:De la documentación, una explicación de los caracteres utilizados con
col_types
:fuente
fread
Sin embargo, no admite archivos comprimidos. Los archivos grandes generalmente están comprimidos.fread
. Vale la pena notar quefread
es muy probable que lea el archivo sin comprimir considerablemente más rápido queread.table
el archivo comprimido. Ver aquí para un ejemplo .read.table
no lo salvará. En ese caso, es posible que desee ver elff
paquete.fread
para leer grandes archivos comprimidos como esto:fread("gunzip -c data.txt.gz", drop = c(8:13))
.También podría usar JDBC para lograr esto. Creemos un archivo csv de muestra.
Descargue y guarde el controlador CSV JDBC desde este enlace: http://sourceforge.net/projects/csvjdbc/files/latest/download
fuente
Lo haces así:
fuente