########## ### G.S.Vidaurre June 2015 # Laboratorio II ### Objetivos: # read.csv() # is.na() y trabajar con NAs # all(), any() # seq(), rnorm() # paste() y strsplit() # escribir funciones ### Leer datos del Lab. I con read.csv() # getwd() # setwd("~/Desktop") dee.df <- read.csv("Chickadee test data.csv", row.names = 1) View(dee.df) ### is.na() y trabajar con NAs # Determinar el número e índice de NAs en la variable "kg" length(which(is.na(dee.df$kg))) which(is.na(dee.df$kg)) # Usando is.na() para un data frame, se da cuenta que el data frame se # guarda como un vector largo length(which(is.na(dee.df))) which(is.na(dee.df)) # Usando all() y any() para comparar NAs y otros valores en vectores # ?all # ?any y <- dee.df$kg # crear un vector igual a dee.df$kg is.na(dee.df$kg) == is.na(y) # comparar los NAs en ambos vectores (dee.df$kg==y)[!is.na(dee.df$kg)] # comparar todos los valores numéricos y[4] <- NA # crear un vector con un NA más que dee.df$kg y[1:5] is.na(dee.df$kg) == is.na(y) (dee.df$kg==y)[!is.na(dee.df$kg)] # Juntar las dos comparaciones usando all() o any() all(is.na(dee.df$kg) == is.na(y)) & all((dee.df$kg==y)[!is.na(dee.df$kg)]) any(is.na(dee.df$kg) == is.na(y)) & any((dee.df$kg==y)[!is.na(dee.df$kg)]) # Algunas funciones tienen argumentos para filtrar NAs mean(dee.df$kg) mean(dee.df$kg, na.rm = TRUE) # NAs también se pueden filtrar usando expresión regular ### Generar sequencias regulares o datos al azar con seq() y rnorm() test.dees <- seq(1, 3.25, 0.3) test.dees test.dees <- rnorm(5, 3.4, 0.1) test.dees ### paste() y strsplit() para manejar vectores de carácteres ("strings") Glau <- paste(dee.df[1, 1], dee.df[1, 2], sep = ".") Glau # con fixed = TRUE uno no tiene que usar expresión regular strsplit(Glau, ".", fixed = TRUE) # "." es un símbolo especial en R strsplit(Glau, "[.]") # también funciona Glau <- paste(dee.df[1, 1], dee.df[1, 2], sep = "_") Glau strsplit(Glau, "_") # "," no es un símbolo especial strsplit(Glau, "[_]") ### Siempre es mejor escribir funciones # Una función para juntar genero y especie create.nm <- function(x, y){ z <- paste(x, y, sep = "_") return(z) } Glau <- create.nm(dee.df[1, 1], dee.df[1, 2]) # Una función para sacar el nombre del género chng.nms <- function(x){ y <- strsplit(x, "_") return(y[[1]][1]) } chng.nms(Glau) ### EJERCICIOS: # Generar un vector de 15 dees con un promedio de 7.5 y una desviación de 0.05 # Reemplazar elemento 3 con un NA, y añadir otro NA al final del vector # Usar strsplit() para dividir la fecha 5 veces ( date() ) # Usar paste() para juntar el dia, mes y año