5 prácticas opciones en fread de R data.table

Como todas las funciones del paquete data.table R, fread es rápido. Muy rapido. Pero hay más que fread que velocidad. Tiene varias funciones y opciones útiles al importar datos externos a R. Aquí hay cinco de las más útiles.

Nota: Si desea seguirlo, descargue el archivo CSV del New York Times de casos diarios de Covid-19 por condado de EE. UU. En //github.com/nytimes/covid-19-data/raw/master/us-counties. csv.

Utilice la opción nrows de fread

¿Su archivo es grande? ¿Le gustaría examinar su estructura antes de importar todo, sin tener que abrirlo en un editor de texto o Excel? Utilice la nrowsopción de fread para importar solo una parte de un archivo para su exploración .

El siguiente código importa solo las primeras 10 filas del CSV.

mydt10 <- fread ("us-counties.csv", nrows = 10)

Si solo desea ver los nombres de las columnas sin ningún dato, puede usar nrows = 0

Utilice la opción de selección de fread

Una vez que conozca la estructura del archivo, puede elegir qué columnas importar . La selectopción de fread le permite elegir las columnas que desea conservar. selecttoma un vector de nombres de columna o números de posición de columna . Si son nombres, deben estar entre comillas, como la mayoría de los vectores de cadenas de caracteres:

mydt <- fread ("us-condados.csv",

select = c ("fecha", "condado", "estado", "casos"))

Como siempre, los números no necesitan comillas:

mydt <- fread ("us-counties.csv", select = c (1,2,3,5))

Puede usar un objeto R con un vector de nombres de columna dentro de fread, como puede ver en el siguiente grupo de código. Creo un vector my_cols con fecha, condado, estado y casos; luego uso ese vector dentro de fread.

my_cols <- c ("fecha", "condado", "estado", "casos")

mydt <- fread ("us-counties.csv", select = my_cols)

Lo contrario de selectes drop. Puede elegir importar todas las columnas excepto las que especifique drop, como por ejemplo:

mydt <- fread ("us-condados.csv", drop = c ("fips", "muertes"))

Al igual que con select, droptoma un vector de nombres de columna o posiciones numéricas. 

Usa fread con grep

Si está familiarizado con Unix, puede  ejecutar herramientas de línea de comandos desde dentro de fread . Por ejemplo, si solo quisiera datos de California, podría usar grep para importar solo líneas que contienen el texto "California". Tenga en cuenta que esto busca cada fila completa como una cadena de texto, no como una columna específica, por lo que sus datos deben estar en un formato que tenga sentido.

ca <- fread ("grep California us-counties.csv")

Desafortunadamente, grep no comprende los nombres de las columnas del archivo original, por lo que termina con los nombres predeterminados.

head (ca) V1 V2 V3 V4 V5 V6 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Ángeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020 -01-27 Los Ángeles California 6037 1 0 5: 2020-01-27 Orange California 6059 1 0 6: 2020-01-28 Los Ángeles California 6037 1 0

Sin embargo, fread nos permite especificar los nombres de las columnas con la col.namesopción. Puedo establecer los nombres en función de los nombres de mydt10 que creé anteriormente.

ca head (ca) fecha condado estado fips casos muertes 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Ángeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020-01-27 Los Ángeles California 6037 1 0 5: 2020-01-27 Orange California 6059 1 0 6: 2020-01-28 Los Ángeles California 6037 1 0

También podemos usar expresiones regulares, con la -Eopción de grep , lo que nos permite realizar búsquedas más complejas, como buscar cuatro estados a la vez. 

estados4 <- fread (cmd = "grep -E 'Texas | Arizona | Florida | Carolina del Sur' us-counties.csv",

col.names = nombres (mydt10))

Una vez más, un recordatorio: esto busca cada uno de esos nombres de estado en cualquier lugar de la fila , no solo en la columna de estado. Si ejecuta el código anterior y verifica con qué estados están incluidos en los resultados unique(states4$state), verá Oklahoma y Missouri en la columna de estados junto con Texas, Arizona, Florida y Carolina del Sur. Eso es porque tanto Oklahoma como Missouri tienen condados llamados Texas.

Por lo tanto, grep durante la importación de archivos es una forma de filtrar una gran cantidad de datos que no desea de un conjunto de datos muy grande; pero no garantiza que solo obtenga lo que desea. Después de este tipo de importación, aún debe filtrar específicamente los datos de la columna para asegurarse de que no obtiene nada inesperado.

Utilice la opción colClasses de fread

Puede establecer clases de columna durante la importación , solo para algunas columnas, no para todas. Por ejemplo, la columna de fecha en estos datos viene como cadenas de caracteres, aunque esté en formato año-mes-día. Podemos establecer la columna denominada fecha en el tipo de datos Fecha  durante la importación usando la colClassesopción. 

mydt <- fread ("us-counties.csv", colClasses = c ("date" = "Date"))

Ahora, las fechas son fechas.

> str (mydt) Clases 'data.table' y 'data.frame': 322651 obs. de 6 variables: $ fecha: Fecha, formato: "2020-01-21" "2020-01-22" "2020-01-23" ... $ condado: chr "Snohomish" "Snohomish" "Snohomish" "Cook "... $ estado: chr" Washington "" Washington "" Washington "" Illinois "... $ fips: int 53061 53061 53061 17031 53061 6059 17031 53061 4013 6037 ... $ casos: int 1 1 1 1 1 1 1 1 1 1 ... $ muertes: int 0 0 0 0 0 0 0 0 0 0 ...

Usa fread en archivos comprimidos

Puede importar un archivo comprimido sin descomprimirlo primero . fread puede importar archivos gz y bz2 directamente, como  mydt <- fread("myfile.gz"). Si necesita importar un archivo zip, puede descomprimirlo con el unzipcomando del sistema dentro de fread, usando la sintaxis  mydt <- fread(cmd = 'unzip -cq myfile.zip').

Para obtener más sugerencias de R, diríjase a la página Haga más con R.