R - Archivos CSV

En R, podemos leer datos de archivos almacenados fuera del entorno R. También podemos escribir datos en archivos que serán almacenados y accesibles por el sistema operativo. R puede leer y escribir en varios formatos de archivo como csv, excel, xml, etc.

En este capítulo, aprenderemos a leer datos de un archivo csv y luego escribir datos en un archivo csv. El archivo debe estar presente en el directorio de trabajo actual para que R pueda leerlo. Por supuesto, también podemos configurar nuestro propio directorio y leer archivos desde allí.

Obtener y configurar el directorio de trabajo

Puede comprobar a qué directorio apunta el espacio de trabajo de R utilizando el getwd()función. También puede configurar un nuevo directorio de trabajo usandosetwd()función.

# Get and print current working directory.
print(getwd())

# Set current working directory.
setwd("/web/com")

# Get and print current working directory.
print(getwd())

Cuando ejecutamos el código anterior, produce el siguiente resultado:

[1] "/web/com/1441086124_2016"
[1] "/web/com"

Este resultado depende de su sistema operativo y su directorio actual donde está trabajando.

Entrada como archivo CSV

El archivo csv es un archivo de texto en el que los valores de las columnas están separados por una coma. Consideremos los siguientes datos presentes en el archivo llamadoinput.csv.

Puede crear este archivo usando el bloc de notas de Windows copiando y pegando estos datos. Guarde el archivo comoinput.csv usando la opción guardar como todos los archivos (*. *) en el bloc de notas.

id,name,salary,start_date,dept
1,Rick,623.3,2012-01-01,IT
2,Dan,515.2,2013-09-23,Operations
3,Michelle,611,2014-11-15,IT
4,Ryan,729,2014-05-11,HR
5,Gary,843.25,2015-03-27,Finance
6,Nina,578,2013-05-21,IT
7,Simon,632.8,2013-07-30,Operations
8,Guru,722.5,2014-06-17,Finance

Leer un archivo CSV

A continuación se muestra un ejemplo sencillo de read.csv() función para leer un archivo CSV disponible en su directorio de trabajo actual -

data <- read.csv("input.csv")
print(data)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

id,   name,    salary,   start_date,     dept
1      1    Rick     623.30    2012-01-01      IT
2      2    Dan      515.20    2013-09-23      Operations
3      3    Michelle 611.00    2014-11-15      IT
4      4    Ryan     729.00    2014-05-11      HR
5     NA    Gary     843.25    2015-03-27      Finance
6      6    Nina     578.00    2013-05-21      IT
7      7    Simon    632.80    2013-07-30      Operations
8      8    Guru     722.50    2014-06-17      Finance

Analizando el archivo CSV

Por defecto el read.csv()La función da la salida como un marco de datos. Esto se puede comprobar fácilmente de la siguiente manera. También podemos comprobar el número de columnas y filas.

data <- read.csv("input.csv")

print(is.data.frame(data))
print(ncol(data))
print(nrow(data))

Cuando ejecutamos el código anterior, produce el siguiente resultado:

[1] TRUE
[1] 5
[1] 8

Una vez que leemos los datos en un marco de datos, podemos aplicar todas las funciones aplicables a los marcos de datos como se explica en la sección siguiente.

Obtén el salario máximo

# Create a data frame.
data <- read.csv("input.csv")

# Get the max salary from data frame.
sal <- max(data$salary)
print(sal)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

[1] 843.25

Obtenga los detalles de la persona con salario máximo

Podemos buscar filas que cumplan con criterios de filtro específicos similares a una cláusula where de SQL.

# Create a data frame.
data <- read.csv("input.csv")

# Get the max salary from data frame.
sal <- max(data$salary)

# Get the person detail having max salary.
retval <- subset(data, salary == max(salary))
print(retval)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

id    name  salary  start_date    dept
5     NA    Gary  843.25  2015-03-27    Finance

Haga que todas las personas trabajen en el departamento de TI

# Create a data frame.
data <- read.csv("input.csv")

retval <- subset( data, dept == "IT")
print(retval)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

id   name      salary   start_date   dept
1      1    Rick      623.3    2012-01-01   IT
3      3    Michelle  611.0    2014-11-15   IT
6      6    Nina      578.0    2013-05-21   IT

Obtenga las personas del departamento de TI cuyo salario sea superior a 600

# Create a data frame.
data <- read.csv("input.csv")

info <- subset(data, salary > 600 & dept == "IT")
print(info)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

id   name      salary   start_date   dept
1      1    Rick      623.3    2012-01-01   IT
3      3    Michelle  611.0    2014-11-15   IT

Obtenga las personas que se unieron a partir de 2014

# Create a data frame.
data <- read.csv("input.csv")

retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
print(retval)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

id   name     salary   start_date    dept
3      3    Michelle 611.00   2014-11-15    IT
4      4    Ryan     729.00   2014-05-11    HR
5     NA    Gary     843.25   2015-03-27    Finance
8      8    Guru     722.50   2014-06-17    Finance

Escribir en un archivo CSV

R puede crear un archivo csv desde un marco de datos existente. loswrite.csv()La función se utiliza para crear el archivo csv. Este archivo se crea en el directorio de trabajo.

# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))

# Write filtered data into a new file.
write.csv(retval,"output.csv")
newdata <- read.csv("output.csv")
print(newdata)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

X      id   name      salary   start_date    dept
1 3      3    Michelle  611.00   2014-11-15    IT
2 4      4    Ryan      729.00   2014-05-11    HR
3 5     NA    Gary      843.25   2015-03-27    Finance
4 8      8    Guru      722.50   2014-06-17    Finance

Aquí la columna X proviene del conjunto de datos newper. Esto se puede eliminar utilizando parámetros adicionales mientras se escribe el archivo.

# Create a data frame.
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))

# Write filtered data into a new file.
write.csv(retval,"output.csv", row.names = FALSE)
newdata <- read.csv("output.csv")
print(newdata)

Cuando ejecutamos el código anterior, produce el siguiente resultado:

id    name      salary   start_date    dept
1      3    Michelle  611.00   2014-11-15    IT
2      4    Ryan      729.00   2014-05-11    HR
3     NA    Gary      843.25   2015-03-27    Finance
4      8    Guru      722.50   2014-06-17    Finance