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