En esta práctica vamos a trabajar con la tabla de datos robles que ya conoces de la primera práctica.
Para ello:
read.table
y guárdalo en un data.frame
(una tabla) con el nombre robles
. Asegúrate de usar correctamente las opciones header
, dec
y sep
al leer el fichero.robles = read.table(file = "p2-robles.csv", header = TRUE, sep = ";", dec = ".")
Nitrogeno
. Usaremos las funcioens mean
y sd
mean(robles$Nitrogeno)
## [1] 3.293737
sd(robles$Nitrogeno)
## [1] 0.6415097
1:10
genera la sucesiçon 1, 2, 3,…, 10, y que los corchetes []
sirven para referirse a los elementos de un vector/tablamean(robles$Nitrogeno[1:14])
## [1] 3.506857
sd(robles$Nitrogeno[1:14])
## [1] 0.6564765
Potasio
mayor o igual que 2? Puedes recuperar los valores del Potasio de los robles que tienen más de 2 de Potasiorobles$Potasio[robles$Potasio >= 2]
y, a continuación, calcular la longitud de dicho vector
length(robles$Potasio[robles$Potasio >= 2])
## [1] 15
Otra alternativa es comparar cada elemento del vector robles$Potasio
con 2
robles$Potasio >= 2
## [1] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
## [34] TRUE FALSE TRUE FALSE TRUE
para obtener TRUE
s y FALSE
s según se cumpla o no esa condición. Recuerda que TRUE
vale 1 y FALSE
cero, con lo que sumas todos esos unos y ceros obtienes la cantidad deseada
sum(robles$Potasio >= 2)
## [1] 15
Nitrogeno
para aquellas observaciones en las que Potasio
es mayor o igual que 2. Compárala con la media que has calculado en el anterior apartado. Haz lo mismo con la cuasidesviación típica. Basta con calcular ambas mediasmean(robles$Nitrogeno)
## [1] 3.293737
mean(robles$Nitrogeno[robles$Potasio >= 2])
## [1] 3.570467
en el segundo caso la media es ligeramente superior, y las cuasidesviaciones típicas
sd(robles$Nitrogeno)
## [1] 0.6415097
sd(robles$Nitrogeno[robles$Potasio >= 2])
## [1] 0.5133733
Nitrogeno
para los individuos que tuvieron angina de pecho (es decir, Variedad == "A"
) Recicla el código ya escrito para obtenermean(robles$Nitrogeno[robles$Variedad == "A"])
## [1] 3.206143
Hierro
, Calcio
, Zona
, Tratamiento
.robles[1:11, c("Hierro", "Calcio", "Zona", "Tratamiento")]
## Hierro Calcio Zona Tratamiento
## 1 0.058 2.365 1 0
## 2 0.060 2.745 1 0
## 3 0.058 2.513 1 0
## 4 0.059 2.361 1 0
## 5 0.061 2.330 1 0
## 6 0.027 2.450 1 1
## 7 0.059 2.750 1 1
## 8 0.062 2.467 1 1
## 9 0.057 2.666 1 1
## 10 0.059 2.666 1 1
## 11 0.011 2.599 2 0
lnHierro
(logaritmo neperiano de la concentración de hierro) y añadela a la tabla. Tal y como se indica en el enunciado, puedes calcular primero el logaritmolnHierro = log(robles$Hierro)
a continuación, añadirlos a la tabla
robles$lnHierro = lnHierro
O bien hacerlo todo en un solo paso con
robles$lnHierro = log(robles$Hierro)
Calcio
. ¿Hay valores atípicos? ¿Cuáles son? ¿Y qué filas ocupan en la tabla? La orden esboxplot(robles$Calcio)
R
ha calculado varias cosas (cuartiles, valores atípicos,…) para representar ese diagrama. Para acceder a dicha información, hay que guardar el boxplot en una variable
bp.Calcio = boxplot(robles$Calcio)
Y buscar los valores atípicos (en inglés outliers
)
bp.Calcio$out
## [1] 0.9
Con esto obtenemos su valor, pero no la posición que ocupan en la tabla. Usa la función which
para determinar en qué fila están
# traduccion simultanea
# que posicion ocupan en robles$bmi los valores que estan en bp.bmi$out (atipicos)
Calcio
correspondientes a los dos posibles niveles (valores) del factor Variedad
. Recuerda la notación de fórmula con la tilde ~
boxplot(Calcio ~ Variedad, data= robles)
Manganeso
.mean(robles$Manganeso)
## [1] NA
mean
con la opción na.rm = TRUE
(NA remove, eliminar los NA) para pedirle a R que ignore esos valores ausentes al calcular la media.mean(robles$Manganeso, na.rm = TRUE)
## [1] 0.01483333
complete.cases(robles)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [12] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [23] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [34] TRUE TRUE FALSE TRUE FALSE
para identificar las filas de la tabla en las que hay valores ausentes (en alguna de las columnas).
!
sirve para negar, y which
indica el número de filawhich(!complete.cases(robles))
## [1] 36 38
literalmente, se pregunta qué filas están incompletas en la tabla (busca los FALSE
en la lista de arriba).
complete.cases
con which
para averiguar el número de filas en las que faltan valores. Con la siguiente ordenrobles = robles[complete.cases(robles), ]
conservamos sólo las filas que están completas (en las que complete.cases(robles)
vale TRUE
) y todas las columnas de la tabla.
is.na
. Por ejemplo, prueba con:is.na(robles$Manganeso)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [34] FALSE FALSE FALSE
esta función se aplica a vectores y vale TRUE
cuando un elemento del vector está ausente
which
para ver qué números de fila corresponden a valores ausentes de Manganeso
.which(is.na(robles$Manganeso))
## integer(0)
es dcir, no hay ninguno, el vector está completo.
Antes de hacer este ejercicio debes visto el vídeo (o leído la introducción) sobre los documentos reproducibles.
Crea un documento reproducible en RMarkdown a partir del código que has escrito para responder al ejercicio 1 de la práctica 2. El código debe ir en los chunks del documento reproducible y además debes añadir comentarios fuera de esos chunks explicando los pasos que das para resolver el ejercicio. A partir de ese documento reproducible debes generar documentos HTMl y docx.