1-Elementos Básicos de R (Día 1)

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

Día 1

Elementos básicos de R:
Datos y estructuras de datos
Los principales tipos de datos en R: son numeric (que está reservado para los
números naturales) y integer (reservado para números enteros), character (para las
palabras o “strings”), logical (TRUE o FALSE). Algunos tipos de datos pueden ser
convertidos en otros, así por ejemplo una variable puede tener como valor el número 1,
o el string “1”. Sin embargo, esto no ocurre en todos los casos, ¿se podría convertir el
string “Hola” en un objeto de la clase numeric?
Los 5 tipos de estructuras de datos más importantes en R son: vector, matrix,
array, list y data.frame. Estos pueden ser datos de 1 dimensión (como vector y list),
de 2 dimensiones (matrix y data.frame) o de más dimensiones (array). Por otro lado,
las estructuras de datos también se diferencian de acuerdo con si los elementos que
contienen son todos del mismo tipo o no. Mientras que, en vector, matrix y array
todos los datos tienen que ser del mismo tipo (por ej. numeric), en list y data.frame
esto no es así (por ej.: podemos tener un data.frame que en la primera columna tenga
datos tipo character y en la segunda datos tipo numeric). Además de las estructuras
mencionadas también tenemos los factores. Factor es un tipo especial de vector de
caracteres que se reserva para asignar variables cualitativas, como por ejemplo los
distintos tratamientos dentro de un experimento).
Ejercicios:
1) Asígnale a la variable x el valor 2 y a la variable y el valor 10. Ahora asigna a
la variable w el valor x+y y a la variable z el valor x == y. Observa que tiene
dos signos = y no sólo uno, ¿Por qué? ¿De qué clase son estas dos últimas
variables? Ayuda: la asignación de una variable se realiza con el operador
“<-”, así por ejemplo para asignar el valor “Hola Mundo” a la variable
Saludo debo tipear Saludo<-”Hola Mundo”. Además, tipea en la consola “?
class”.
Tiene dos signos ==, porque este es un operador relacional que arroja como
resultado TRUE o FALSE si se cumple o no la condición que planteó. En este
caso el resultado fue FALSE, debido a que la variable z contiene el valor (TRUE
o FALSE) dependiente del cumplimiento de X==Y, como X es igual a 2 e Y es
igual a 10, la condición no se cumple y el contenido de la variable Z es FALSE.
Las dos últimas variables son clase “numeric”.
x <- 2
y <- 10
w <- x+y
z <- x==y
class(x)
class(y)
2) Crea una variable que se llame “GFP” y asígnale el valor 509. ¿Qué clase de
dato es? Ahora convierte la variable “GFP” en “character”. Ayuda: tipea en la
consola“?as.character”.
GFP <- 509
Día 1

class(GFP)
?as.character
as.character(GFP)
3) Asígnale a la variable GFP el valor “verde” e intenta convertirla en la clase
numeric ¿Qué ocurre?
GFP <- "Verde"
?as.numeric
as.numeric(GFP)

[1]NA
Warning message
NAs introducidos por coerción.
No permite realizar la conversión solicitada debido a que solo se permite la
conversión de numeric a character, y no en viceversa, “verde” ya no puede ser
considerado como un número.
4) Crea un vector que se llame “r1” que contenga 10 números aleatorios elegidos
por vos entre el 0 y el 100 Ayuda: ?c.
?runif
r1 <- c(runif(10, min = 0, max = 100))
r1
5) Con la misma operación que en el ejercicio anterior crea un nuevo vector r2,
ahora realiza las siguientes operaciones: r1+r2, r1*r2, r1/r2. ¿Cómo realiza R
estas operaciones?
r2 <- c(runif(10, min= 0, max=100))
r2
r1 + r2
r1*r2
r1/r2
R realiza estas operaciones realizando cálculo vectorial algebraico simple. Suma,
multiplica y divide elemento por elemento de los vectores utilizados.
6) Intenten ordenar de mayor a menor y de menor a mayor el vector r1. ¿De qué
largo es el vector r1?¿Cómo podría agregarle un elemento al vector r1?
Ayuda ?sort, ?length.
?sort
sort(r1, decreasing= FALSE)
sort(r1, decreasing= TRUE)
length(r1)
r3 <- 30
r4 <- c(r1, r3)
r4
Día 1

El vector tiene una longitud de 10 elementos. Para agregar un nuevo elemento al


vector r1, puedo crear un nuevo vector (r3) con el elemento que quiero agregar
al vector r1 y luego combinarlos en un nuevo vector (r4).
7) Crea dos vectores. Uno llamado fp que contenga los siguientes datos: "Sirius",
"CFP", "GFP", "Citrine", y otro llamado nm que contenga los siguientes
valores: 424, 476, 509, 528. A partir de estos dos vectores crea una matriz m_fp
y un data.frame que se llame df_fp. Comprueba de qué clase es cada objeto.
¿Qué tienen de diferente? Ayuda ?cbind y ?data.frame
fp <- c("Sirius", "CFP", "GFP", "Citrine")
nm <- c(424, 476, 509, 528)
?cbind
m_fp <- cbind(fp, nm)
class(m_fp)
?data.frame
df_fp <- cbind.data.frame(fp, nm)
class(df_fp)

##Alternativa##
df_FP <- data.frame(fp, nm)
class(df_FP)
Los dos primeros objetos son de clase vector, mientras que m_fp es de tipo
matriz y df_fp es de tipo data.frame. La diferencia radica en que este primero
toma a todos los valores como de tipo character¸ mientras que el data.frame,
reconoce la serie de datos del vector nm como numeric.
8) Construye un vector con todos los números del 1 al 9. Ayuda comienzo: fin
numeros <- 1:9
9) Construye un vector con todos los números impares del 1 al 9. Ayuda ?seq
?seq
seq(from=1, to=9, by= 2)
10) Crea una matriz m de 3x2 (3 filas y 2 columnas) que contenga en todas las
posiciones el valor 0. Ayuda: ?matrix
?matrix
vector_cero <- c(0,0,0,0,0,0)
matrix(data=vector_cero, nrow=3, ncol=2)
##Alternativa##
m <- matrix(0, nrow = 3, ncol = 2)
m
11) Crea una matriz m de 3x3 que contenga en la posición [1, 1] el número 1, en la
[1, 2] el número 2 y así hasta el número 9 en la posición [3, 3]. Los elementos
de una matriz son [fila, columna]. Ayuda: ?matrix y ejercicio 8).
?matrix
Día 1

M <- matrix(data=numeros, nrow=3, ncol=3,


byrow= TRUE)
M
12) A la matriz del punto anterior cámbiale el valor de la primera fila y columna
por “Esto es un string” con el siguiente código: m[1, 1] <- “Esto es un string”
(¿Podrías explicar cómo funciona esto?). Imprimir el resultado en pantalla,
¿Qué ocurrió con el resto de los valores de la matriz? ¿Por qué?
M[1,1] <-"Esto es un string"
M
El resto de los valores de la matriz se convirtieron en objetos tipo character,
porque las matrices solo pueden tener un tipo de valor.
13) A partir de un vector “Co2” con los siguientes elementos: “Bajo”, “Medio”,
“Medio”, "Bajo", "Bajo" y “Alto”; crea un objeto de tipo factor. ¿Qué niveles
(o levels) tiene? Ahora cambia el primer valor del objeto por “Medio” de la
siguiente forma Co2[1] <- “Medio” ¿Cambiaron los niveles del objeto Co2?
Ahora si quiero cambiar el primer valor por “Muy bajo”, ¿Qué ocurre? ¿Por
qué? Ayuda: ?factor, ?levels
Co2 <- factor(c("Bajo", "Medio", "Medio",
"Bajo", "Bajo", "Alto"))
class(Co2)
levels(Co2)
Co2[1]<-"Medio"
Co2
Co2[1] <- "Muy Bajo"
Co2
En el primer cambio de la primera posición del objeto tipo factor, el valor
introducido coincide con los niveles del factor anteriormente computados, a
diferencia del último cambio. Si se quisiese realizar este cambio se debería
introducir el nuevo nivel en la primera sentencia.
Subsetting
14) Generen dos listas a partir de las siguientes sintaxis: nombres1 <-
list(c("Juana", "Pedro", "Camila")) y nombres2 <- list("Juana", "Pedro",
"Camila"). ¿Cuántos elementos tienen cada una de ellas? Para cada caso
intenten imprimir en pantalla solamente el nombre Camila.
nombres1 <- list(c("Juana", "Pedro",
"Camila"))
nombres1
nombres2 <- list("Juana", "Pedro", "Camila")
nombres2
class(nombres1)
class(nombres2)
?print
Día 1

nombres1[[1]][3]
nombres2[[3]]
La primera lista tiene un solo elemento, es una lista cuyo único elemento es un
vector de 3 elementos. Al mismo tiempo, la segunda lista es una objeto tipo lista
con 3 elementos, correspondientes a los nombres introducidos.
Ayuda memoria:

 The [ operator always returns an object of the


same class as the original. It can be used to
select multiple elements of an object
 The [[ operator is used to extract elements of
a list or a data frame. It can only be used to
extract a single element and the class of the
returned object will not necessarily be a list or
data frame.
 The $ operator is used to extract elements of
a list or data frame by literal name. Its
semantics are similar to that of [[.

A partir del paquete “datasets” generen un data.frame “air” que contiene datos
climáticos de la ciudad de Nueva York, usando el siguiente comando: air <-
datasets::airquality. (Hay algunos paquetes precargados en R, como por
ejemplo datasets, a los que se accede poniendo nombre del paquete::).
15) Imprime en pantalla solamente las primeras filas de air y luego las últimas.
Ayuda ?head, ?, ?tail.
datasets::airquality
air <- datasets::airquality
?head
?tail
dim(air)
head(air)
tail(air)
Ayuda memoria:

 For vector/array based objects, head()


(tail()) returns a subset of the same
dimensionality as x, usually of the same class.

16) Imprime en pantalla todos los valores de Temperaturas registradas y luego


solamente el valor de Temperatura que se registró el tercer día.
air$Temp
air$Temp[3]
17) Selecciona todas las filas de air del mes de mayo.

air[air$Month==5,]
Día 1

18) ¿En qué día hubo menor radiación solar? ¿De cuánto fue esa radiación?
Ayuda ?which.min y ?min. Al correr el comando min, observamos que el
resultado devuelto es NA. ¿Qué significa? ¿Por qué es el mínimo? Prueba
nuevamente con min, pero pasando el parámetro na.rm = TRUE, es decir,
min(vector, na.rm=TRUE). ¿Qué obtenemos ahora?
head(air)
?min
air$Solar.R
min(air$solar.R)
min(air$Solar.R, na.rm=TRUE)
sort(radiacion, decreasing=TRUE)
?which.min
air[which.min(air$Solar.R),]
19) ¿Cuál fue la temperatura el 27 de agosto? Ayuda: ?which, & (este símbolo se
llama ampersand y es equivalente a “y”. Permite concatenar dos condiciones,
por ejemplo, quiero que el día sea el 27 y el mes sea agosto. Solo aquellos
registros que cumplan ambas condiciones van a incluirse).
air
head(air)
air[which(air$Month==8&air$Day==27),]
air[which(air$Month==8&air$Day==27),][[4]]
20) ¿Cuál fue la temperatura los meses de agosto y septiembre? Ayuda  ?which, |
(este símbolo se llama pipe o tubería y es equivalente a “o”. Permite
concatenar dos condiciones, por ejemplo: quiero que el mes sea agosto o el mes
sea septiembre. Solo aquellos registros que cumplan alguna de las dos
condiciones van a incluirse.)
air[which(air$Month==8|air$Month==9),]
Temp.Agosto <- air[air$Month==8,][[4]]
Temp.Agosto
Temp.Septiembre <- air[air$Month==9,][[4]]
Temp.Septiembre
21) Selecciona todas las filas de air del mes de mayo cuya radiación solar sea
mayor a 150.
air[which(air$Month==5&air$Solar.R>150),]
air[which(air$Month==5&air$Solar.R>150),]
[[2]]
22) La temperatura en el data.frame está expresada en grados Fahrenheit, genera
una nueva columna que se llame temp_c con las temperaturas en grados
Celsius. Ayuda: °C (°F - 32)/1.8.
air$Temp
Temp_F <- air$Temp
Temp_C <- (Temp_F-32)/1.8
Día 1

23) Genera un nuevo data.frame llamado “calor” que contenga la información de


los días calurosos, por ejemplo, en los que hizo más de 30°C. Luego, utilizando
la función table cuenta cuántos días calurosos hubo en cada mes. ¿Qué mes es
el que tuvo mayor cantidad de días calurosos? Ayuda  La función table
permite contar casos. Por ejemplo, aplicando table al vector meses <-
c(“julio”, “julio”, “agosto”, “marzo”, “agosto”, “julio”), obtenemos la
siguiente tabla:

Agosto Julio Marzo


2 3 1
Es decir, table nos dice que en el vector meses, agosto aparece 2 veces, julio 3 y
marzo 1.
calor <-
data.frame(data_frame_completo[which(data_fr
ame_completo$Temp_C>30,),])
calor
?table
table(calor$Month)

También podría gustarte