Sesión II
José Bustos1 & Alex Mellado2
1
Magister Estadística Aplicada, Análisis Estadístico Profesional AESpro.
2 Magister (c) Epidemiología, Departamento de Salud Pública, PUC.
Martes 19 de Julio de 2011
Lectura de bases de datos (dataframes)
Directorio de datos
• Un dataframe se define como una base de datos o tabla de datos que puede ser
visualizada y manipulada como cualquier otro objeto. Eso supone, que debe
leerse como objeto.
• Antes de leer una base de datos, se puede cambiar el directorio de trabajo de R
para facilitar el acceso a archivos, o cambiar la forma de acceder a las bases.
> getwd()
> setwd("C:\\")
• El directorio de trabajo también
puede cambiarse en el menú
“Propiedades” de Windows (botón
derecho sobre el ícono de inicio de R).
# muestra “working directory” actual
# cambia directorio de lectura/escritura
Pequeño manual
http://www.aespro.cl/images/Curso_R/ralarapida.doc
Lectura de bases de datos (dataframes)
Lectura de bases datos creadas en R
> y <- c(6,7,3,4,8,5,6)
# lectura pocos datos con funcion concatenate
> z <- c(“6”,”7”,”3”,”4”,”8”,”5”,”6”)
> x<-scan()
1: 4.5 3.3
2: -1.1 2.2
3:
1 0.78
> nombres<-scan(what=“”)
# lectura desde keyboard (datos numéricos)
# se puede ingresar mas de un dato por linea
# una linea vacia indica el fin de datos
# lectura desde keyboard (datos alfanuméricos)
1: joe fred bob john sam sue robin 8:
> # lectura de datos numéricos y alfanuméricos
> datos<-scan(what=list(edad=0, nombre=“”, sexo=“”))
1: 12 joe M
2: 8 mary F 13 rose F
4:
Lectura de bases de datos (dataframes)
Lectura de texto o .txt
> data<-read.table("datos.txt",h=T)
# lectura texto delimitado por tabs
> data<-read.table("datos.csv",h=T,sep="\t") # lectura texto delimitado por tabs
> data<-read.table("datos.txt",h=T,row.names=1) # lectura usando la primera
columna
# como nombre de cada registro
> data<-read.csv(“datos.csv",h=T)
# lectura texto CSV
> data<-read.table("datos.csv",h=T,sep=",") # lectura CSV usando read.table
¿Cómo leería el archivo “Datos.txt”?
> data<-read.table(“Datos.txt",h=F,sep=",")
Lectura de bases de datos (dataframes)
Lectura de texto o .txt
# Lectura de .txt directa desde R
> data <- read.table("datos.txt",h=T)
datos delimitados por
tabulador
# Lectura de .txt mediante ventana de Windows
>datos <- read.table(file.choose(),header=T)
# lectura de
Lectura de bases de datos (dataframes)
Lectura de Excel, SPSS, etc
• Se pueden leer bases de datos Excel con comandos disponibles en la librería
xlsReadWrite. También se pueden leer bases SPSS o dBase con librería
foreign.
> library(foreign)
> datos <- read.dbf("datos.dbf")
> datos <- read.spss("datos.sav")
# acceso a librería foreign
# lectura datos Dbase
# lectura datos SPSS10
> library(xlsReadWrite)
> datos <- read.xls("Datos.xls",colNames=T)
#acceso a librería xlsReadWrite
# lectura datos Excel
• Las librerías foreign y xlsReadWrite no están incluidas en la instalación de R,
por lo que es necesario instalarlas usado, por ejemplo, install.packages().
Escritura de bases de datos (dataframes)
> write.table(dataframe,”datos.txt”)
archivo de texto
> library(foreign)
> write.dbf(dataframe,“datos.dbf",colNames=T)
> library(xlsReadWrite)
> write.xls(dataframe,“datos.xls",colNames=T)
Excel
# escritura en
# escritura en archivo Dbase
# escritura en archivo
• Formatos dBase y Excel requieren packages foreign y xlsReadWrite.
• Al comando write.table se puede agregar row.names=F y col.names=F para
que no se incluyan números de cada fila y nombres de las variables.
Manipulación de bases de datos (dataframes)
• Dataframe es el nombre del objeto “base de datos” que se crea cuando se lee
un archivo de datos.
> datos
> datos$variable
# muestra el contenido del dataframe "datos"
# muestra la variable indicada del dataframe "datos"
> dim(datos)
# muestra dimension (nro filas y columnas)
> attach(datos)
> detach(datos)
# permite acceso al dataframe por nombre de variables
# elimina accesibilidad por nombre de variables
> names(datos)
# muestra los nombres de las variables en el dataframe
> names(datos)<-c("nom1",...)# cambia nombres de las variables del dataframe
> fix(datos)
# permite editar dataframe en planilla.
Manipulación de bases de datos (dataframes)
> datos[1,]
> datos[1:10,]
> datos[,1]
> datos[,1:5]
> datos[1,1]
dataframe
> datos[1:10,1:5]
#
#
#
#
#
muestra
muestra
muestra
muestra
muestra
fila indicada del dataframe
filas 1 a 10 del dataframe
columna indicada del dataframe
columnas 1 a 5 del dataframe
dato en coordenada [fila,col] del
> datos[c(1,3:10),]
# muestra filas indicada del dataframe
> datos[,1]>10
# muestra vector de mismo largo que datos[,1] con
# valores TRUE o FALSE segun condicion
> datos[datos$var>10,]
# muestra solo los casos que cumplen variable>10
# operadores validos: >, >=, <, <=, ==, !=
> datos[!datos$var>10,]
> datos[-(1:10),]
adelante
# muestra solo casos que no cumplen var>10
# muestra datos desde registro 11 en
# muestra datos en coordenadas indicadas
Manipulación de bases de datos (dataframes)
> na.omit(datos)
# muestra registros que no contengan missing values
> datos["nombre",]
# muestra fila con el "nombre" de fila indicado
# (requiere lectura usando opcion row.names)
> datos[,”nombre”]
# muestra todos los datos de la variable indicada
> datos[1:10,”nombre”]
# muestra primeros 10 datos de la variable indicada
> datos[c(1,5,10:15),c(”nombre1”,”nombre2”)]
> datos[trat==“A”,”var”]
# ¿que muesta este comando?
# muestra variable “var” para registros con
> # ensaye cada parte del siguiente comando por separado:
> data.poi <- data.frame(table(rpois(50,2)))
trat=“A”
Manipulación de bases de datos (dataframes)
Elementos de un vector y de un dataframe
• Los elementos de un dataframe pueden indicarse por fila, columna o coordenadas
(siempre hay una coma que separa las filas y columnas):
> datos[1,]
> datos["nombre",]
# muestra fila 1
# muestra fila con "nombre" indicado
> datos[,2]
> datos[,”nombre”]
# muestra columna 2
# muestra columna con “nombre” indicado
• Los elementos de un vector (o una columna o variable del dataframe) se
indican por sus elementos o rangos de elementos (no se usan comas como en
un dataframe):
> datos$variable
# muestra variable indicada
> datos$variable[1]
# muestra dato 1 de la variable indicada
> datos$var1[datos$var2==0]# muestra VAR1 sólo para casos con VAR2=0
Manipulación de bases de datos (dataframes)
• El comando merge permite juntar dos dataframes de acuerdo a variables
comunes en ambos dataframes. El comando subset permite hacer
subconjuntos de datos según alguna condición y transform permite agregar
variables nuevas al dataframe.
> juntos<-merge(data1,data2)
#
#
> juntos<-merge(data1,data2,all=T) #
#
merge data1 y data2 según variables idénticas
deja casos coincidentes en ambos dataframes
merge data1 y data2 con todos los casos en
ambos dataframes (incluye NA si no hay datos)
> datos2<-subset(datos,variable==val) # genera dataframe con subconjunto de datos
# que cumple condición
> datos3<-transform(datos,xnew=x^2) # genera dataframe que incluye variable
# transformada “xnew”
> new<-unique(datos)
# crea dataframe excluyendo registros duplicados
Manipulación de bases de datos (dataframes)
Función “data.frame”
• El comando data.frame permite crear dataframes a partir de objetos aislados.
Nótese que es distinto al comando cbind visto antes, que genera matrices.
> data1 <- data.frame(x,y,z)
# crea dataframe usando las variables x, y, z
> data1 <- cbind(data,x)
# reconstruye dataframe agregando columna x
> data2 <- cbind(x,y,z)
# crea matriz usando las variables x, y, z
> is.matrix(data1)
[1] FALSE
> is.matrix(data2)
[1] TRUE
# determinemos si data1 y data2 son matrices
> is.data.frame(data1)
[1] TRUE
> is.data.frame(data2)
[1] FALSE
# determinemos si son dataframes
Ejercicio 2
Genere dataframe infection a partir de la lectura de archivo infection.txt
•
•
•
•
•
•
•
•
•
Muestre los nombres de las variables
Muestre los primero 10 registros del dataframe
Muestre las primeras 3 columnas del dataframe
Muestre los primeros 10 datos de las primeras 3 columnas del dataframe
Muestre sólo el contenido de la variable age
Genere un vector llamado menor100 que tome valores TRUE si el valor de
la variable age es menor que 100 o FALSE en caso contrario (el vector debe
tener el mismo largo que infection$age)
Muestre los registros de infection que tengan age < 100. Genere un nuevo
dataframe infec100 con esos registros
Agregue una nueva variable age2 (age al cuadrado) al dataframe infection
Guarde el dataframe infection con las 5 variables (incluyendo age2) en el
archivo “infection2.txt” en la raíz del disco duro (“C:\”)
Ejercicio 3
Genere dataframe mc a partir del archivo monocultures.xls
(archivo Excel)
•
•
•
•
•
•
•
Determine el número de filas (registros) y columnas (variables) del dataframe
Describa las variables numéricas del dataframe (summary)
Describa las variables categoricas del dataframe (table)
Agregue una columna numérica al dataframe, que sea un número correlativo (o
sea, un ID para cada registro)
Genere un nuevo dataframe mc.1 con los registros de infections que cumplan
out<=1000
Genere un nuevo dataframe mc.2 con los registros de infections que cumplan
out<=1000 y además sean del año 2002
Guarde el dataframe infections.2 en el archivo “monocultures2.xls” (archivo
Excel) en la raíz del disco duro (“C:\”)
Descargar

Intro R