160 likes | 259 Views
Sesión II. José Bustos 1 & Alex Mellado 2 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.
E N D
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() # muestra “working directory” actual > setwd("C:\\")# cambia directorio de lectura/escritura • El directorio de trabajo también puede cambiarse en el menú “Propiedades” de Windows (botón derecho sobre el ícono de inicio de R).
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() # lectura desde keyboard (datos numéricos) 1: 4.5 3.3 1 0.78 # se puede ingresar mas de un dato por linea 2: -1.1 2.2 3: # una linea vacia indica el fin de datos > nombres<-scan(what=“”) # lectura desde keyboard (datosalfanumé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) # lectura de datos delimitados por tabulador # Lectura de .txt mediante ventana de Windows >datos <- read.table(file.choose(),header=T)
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) # acceso a librería foreign > datos <- read.dbf("datos.dbf") # lectura datos Dbase > datos <- read.spss("datos.sav") # lectura datos SPSS10 > library(xlsReadWrite) #acceso a librería xlsReadWrite > datos <- read.xls("Datos.xls",colNames=T) # 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”) # escritura en archivo de texto > library(foreign) > write.dbf(dataframe,“datos.dbf",colNames=T) # escritura en archivo Dbase > library(xlsReadWrite) > write.xls(dataframe,“datos.xls",colNames=T) # escritura en archivo Excel • Formatos dBase y Excel requieren packagesforeign 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 # muestra el contenido del dataframe "datos" > datos$variable # muestra la variable indicada del dataframe "datos" > dim(datos) # muestra dimension (nro filas y columnas) > attach(datos) # permite acceso al dataframe por nombre de variables > detach(datos) # 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,] # muestra fila indicada del dataframe > datos[1:10,] # muestra filas 1 a 10 del dataframe > datos[,1] # muestra columna indicada del dataframe > datos[,1:5] # muestra columnas 1 a 5 del dataframe > datos[1,1] # muestra dato en coordenada [fila,col] del dataframe > datos[1:10,1:5] # muestra datos en coordenadas indicadas > 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,] # muestra solo casos que no cumplen var>10 > datos[-(1:10),] # muestra datos desde registro 11 en adelante
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”)] # ¿que muesta este comando? > datos[trat==“A”,”var”] # muestra variable “var” para registros con trat=“A” > # ensaye cada parte del siguiente comando por separado: > data.poi <- data.frame(table(rpois(50,2)))
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,] # muestra fila 1 > datos["nombre",] # muestra fila con "nombre" indicado > datos[,2] # muestra columna 2 > datos[,”nombre”] # 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) # merge data1 y data2 según variables idénticas # deja casos coincidentes en ambos dataframes > juntos<-merge(data1,data2,all=T) # 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) # determinemos si data1 y data2 son matrices [1] FALSE > is.matrix(data2) [1] TRUE > is.data.frame(data1) # determinemos si son dataframes [1] TRUE > is.data.frame(data2) [1] FALSE
Ejercicio 2 • Genere dataframeinfection 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 dataframeinfection • Guarde el dataframeinfection con las 5 variables (incluyendo age2) en el archivo “infection2.txt” en la raíz del disco duro (“C:\”)
Ejercicio 3 • Genere dataframemc 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:\”)