#--------------
# 1) Operaciones aritméticas básicas
# Suma
5 + 7
## [1] 12
# Resta
5 - 3
## [1] 2
# Multiplicación
5 * 7
## [1] 35
# División
5/3
## [1] 1.666667
# Exponentes
2^3
## [1] 8
# Devolver el resto de la división de 5/3
5 %% 3
## [1] 2
# Logaritmos y exponenciales :
x = 5/3
log2(x) # Logarítmo en base 2 de x
## [1] 0.7369656
log10(x) # Logarítmo en base 10 de x
## [1] 0.2218487
exp(x) # Exponencial de x
## [1] 5.29449
# Funciones trigonométricas :
cos(x) # Coseno de x
## [1] -0.09572355
sin(x) # Seno de x
## [1] 0.995408
tan(x) # Tangente de x
## [1] -10.39878
acos(x/100) # Arcoseno de x
## [1] 1.554129
asin(x/100) # Arcseno de x
## [1] 0.01666744
atan(x/100) # Arcotangente de x
## [1] 0.01666512
abs(x) # Valor absoluto de x
## [1] 1.666667
sqrt(x) # Raíz cuadrada de x
## [1] 1.290994
#--------------
# 2) Asignación de valores a objetos o a variables
sitios <- 2 # Número de sitios = 2
sitios = 2 # Otra forma
n.sitios <- "dos" # Número de sitios como un caracter
dos.sitios <- TRUE # Objeto lógico
# Imprimir los valores asignados
sitios # Imprime el número de sitios
## [1] 2
print(sitios) # Otra forma
## [1] 2
n.sitios # Sitios asignados como caracter
## [1] "dos"
dos.sitios # Sentencia lógica
## [1] TRUE
# Identificar el tipo de asignación
class(sitios) # Tipología de los sitios
## [1] "numeric"
class(n.sitios) # Tipología del número de sitios
## [1] "character"
class(dos.sitios) # Tipología de la sentencia lógica
## [1] "logical"
is.numeric(sitios) # Identificador: is.numeric(), is.character(), is.logical()
## [1] TRUE
as.character(sitios) # Cambiar: as.numeric(), as.character(), as.logical()
## [1] "2"
# Operaciones con las asignaciones
3 * sitios # Multiplicar 3 por el número de sitios
## [1] 6
# Área de un rectángulo
altura <- 20 # Altura del rectángulo
ancho <- 10 # Ancho
área <- altura*ancho # Cálculo de área
área # Imprimir el área
## [1] 200
print(área) # Otra forma de imprimir el área
## [1] 200
ls() # Permite visualizar a los objetos creados
## [1] "altura" "ancho" "área" "dos.sitios" "n.sitios"
## [6] "sitios" "x"
#--------------
# 3) Vectores
sitios <- c(2, 3, 2, 3) # Vector sitios
sitios # Imprimir el vector
## [1] 2 3 2 3
sitios <- c("dos", "tres", "dos", "dos") # Vector como caracter
sitios
## [1] "dos" "tres" "dos" "dos"
abundancia <- c(TRUE, FALSE, TRUE, TRUE) # vector con elementos lógicos
abundancia
## [1] TRUE FALSE TRUE TRUE
sitios <- c(2, 3, 2, 3) # Vector sitios
names(sitios) <- c("dos", "tres", "dos", "dos") # Nombres de los elementos del vector sitiossitios
sitios <- c(dos= 2, tres= 3, dos= 2, dos= 2) # Otra forma
sitios
## dos tres dos dos
## 2 3 2 2
length(sitios) # Elementos del vector sitios
## [1] 4
sitios[2] # Segundo elemento del vector sitios
## tres
## 3
sitios[c(1,4)] # Primer y cuarto elemento del vector
## dos dos
## 2 2
sitios [1:3] # Tres primeros elementos del vector sitios
## dos tres dos
## 2 3 2
sitios [-1] # Eliminar el primer elemento del vector
## tres dos dos
## 3 2 2
sitios[abundancia == TRUE] # Abundancias con valor verdadero
## dos dos dos
## 2 2 2
sitios[sitios >= 2] # Sitios con abundancias con valores mayor o igual a 2
## dos tres dos dos
## 2 3 2 2
sitios[sitios != 3] # Sitios con abundancias diferentes a 3
## dos dos dos
## 2 2 2
#--------------
# 4) Operaciones con escalares y vectores
sitios.1 <- c(A = 2, B= 3, C= 2, D= 3) # Vector sitios en muestreo 1
sitios.1
## A B C D
## 2 3 2 3
sitios.2 <- c(A = 4, B= 6, C= 4, D= 5) # Vector sitios en muestreo 2
sitios.2
## A B C D
## 4 6 4 5
sitios * 3 # Producto de los sitios x 2
## dos tres dos dos
## 6 9 6 6
sitios.1 * sitios.2 # Producto de los sitios 1 y 2
## A B C D
## 8 18 8 15
sitios.1 <- c(2, 3, 2, 3) # Vector sitios en muestreo 1
sitios.1
## [1] 2 3 2 3
max(sitios.1) # Valor máximo
## [1] 3
min(sitios.1) # Valor mínimo
## [1] 2
range(sitios.1) # Rango de los datos del vector
## [1] 2 3
sum(sitios.1) # Suma de los datos del vector
## [1] 10
prod(sitios.1) # Producto de los datos del vector
## [1] 36
mean(sitios.1) # Promedio de los datos del vector
## [1] 2.5
sd(sitios.1) # Desviación estándar
## [1] 0.5773503
var(sitios.1) # Varianza de los datos del vector
## [1] 0.3333333
sort(sitios.1) # Organizar elementos de forma ascendente
## [1] 2 2 3 3
#--------------
# 5) Matrices
Matriz <- matrix(1:15, nrow = 3, ncol = 5) # nrow y nrow: Número de filas y columnas
Matriz
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 4 7 10 13
## [2,] 2 5 8 11 14
## [3,] 3 6 9 12 15
Matriz <- matrix(1:15, nrow = 5, ncol = 3) # 1:15: Secuencia de valores de 1 a 15
Matriz
## [,1] [,2] [,3]
## [1,] 1 6 11
## [2,] 2 7 12
## [3,] 3 8 13
## [4,] 4 9 14
## [5,] 5 10 15
Matriz <- matrix(c(1:15),5,3, byrow= FALSE) # 5,3: Número de filas y columnas
Matriz
## [,1] [,2] [,3]
## [1,] 1 6 11
## [2,] 2 7 12
## [3,] 3 8 13
## [4,] 4 9 14
## [5,] 5 10 15
# Primera opción para crear una Matriz
Matriz <- matrix(c(5, 6, 7, 8, 9, # Elementos de la Matriz
2, 4, 5, 9, 8,
7, 3, 4, 8, 7), # 15 elementos
5,3, byrow=F) # 5 columnas y 3 filas
Matriz
## [,1] [,2] [,3]
## [1,] 5 2 7
## [2,] 6 4 3
## [3,] 7 5 4
## [4,] 8 9 8
## [5,] 9 8 7
# Otra forma con las funciones cbind() o rbind()
col1 <- c(5, 6, 7, 8, 9) # Col 1 a 3, son las tres columnas de la Matriz
col2 <- c(2, 4, 5, 9, 8)
col3 <- c(7, 3, 4, 8, 7)
Matriz <- cbind(col1, col2, col3) # Nombres de las columnas
rownames(Matriz) <- c("A","B","C","D","E") # Nombres de las filasMatriz
Matriz
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## C 7 5 4
## D 8 9 8
## E 9 8 7
# Otra forma con comandos "colnames" y "dimnames"
Matriz <- matrix(
data = c(5, 6, 7, 8, 9, # Elementos de la Matriz
2, 4, 5, 9, 8,
7, 3, 4, 8, 7),
nrow = 5, byrow = FALSE, # nrow= columnas.
dimnames = list(c("A","B","C","D","E"), # dimnames= lista con vector fila y columna
c("col1", "col2", "col3")))
Matriz
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## C 7 5 4
## D 8 9 8
## E 9 8 7
# Otra forma con comandos "colnames" y "dimnames"
nombres <- LETTERS[1:nrow(Matriz)] # Letras para las filas
colnames(Matriz) <- c("col1","col2","col3") # Nombres de las columnas
dimnames(Matriz)=(list(nombres,colnames(Matriz))) # Elaboración de la Matriz
Matriz
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## C 7 5 4
## D 8 9 8
## E 9 8 7
# Algunos comandos para las matrices
t(Matriz) # Transpuesta de la Matriz
## A B C D E
## col1 5 6 7 8 9
## col2 2 4 5 9 8
## col3 7 3 4 8 7
ncol(Matriz) # Número de columnas
## [1] 3
nrow(Matriz) # Número de filas
## [1] 5
dim(Matriz) # Dimensión: Filas y columnas
## [1] 5 3
Matriz[2,] # Ver la segunda fila (coma a la derecha del dato)
## col1 col2 col3
## 6 4 3
Matriz[,2] # Ver la segunda columna (coma a la izquierda del dato)
## A B C D E
## 2 4 5 9 8
Matriz[2:4,] # Filas 2 a la 4
## col1 col2 col3
## B 6 4 3
## C 7 5 4
## D 8 9 8
Matriz[c(2,4),] # Filas 2 y 4
## col1 col2 col3
## B 6 4 3
## D 8 9 8
Matriz[,"col1"] # Ver la columna 1
## A B C D E
## 5 6 7 8 9
Matriz[3,"col1"] # Seleccionar el valor de la 3a fila y columna 1
## [1] 7
Matriz[3, 1] # Otra forma para hacer lo anterior
## [1] 7
Matriz[3, 1:3] # Valores de la fila 3 y de las columnas 1:3
## col1 col2 col3
## 7 5 4
Matriz[-3,] # Excluye a la 3a fila
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## D 8 9 8
## E 9 8 7
#--------------
# 6) Operaciones matriciales
Matriz * 3 # Multiplicar por 3
## col1 col2 col3
## A 15 6 21
## B 18 12 9
## C 21 15 12
## D 24 27 24
## E 27 24 21
log10(Matriz) # Logaritmo en base 10
## col1 col2 col3
## A 0.6989700 0.3010300 0.8450980
## B 0.7781513 0.6020600 0.4771213
## C 0.8450980 0.6989700 0.6020600
## D 0.9030900 0.9542425 0.9030900
## E 0.9542425 0.9030900 0.8450980
round(log10(Matriz),2) # Redondear valores a 2 decimales
## col1 col2 col3
## A 0.70 0.30 0.85
## B 0.78 0.60 0.48
## C 0.85 0.70 0.60
## D 0.90 0.95 0.90
## E 0.95 0.90 0.85
sqrt(Matriz) # Raíz cuadrada
## col1 col2 col3
## A 2.236068 1.414214 2.645751
## B 2.449490 2.000000 1.732051
## C 2.645751 2.236068 2.000000
## D 2.828427 3.000000 2.828427
## E 3.000000 2.828427 2.645751
rowSums(Matriz) # Sumas de filas
## A B C D E
## 14 13 16 25 24
colSums(Matriz) # Sumas de columnas
## col1 col2 col3
## 35 28 29
colMeans(Matriz) # Promedios de columnas
## col1 col2 col3
## 7.0 5.6 5.8
rowMeans(Matriz) # Promedios de filas
## A B C D E
## 4.666667 4.333333 5.333333 8.333333 8.000000
apply(Matriz, 1, mean) # Promedios de filas
## A B C D E
## 4.666667 4.333333 5.333333 8.333333 8.000000
apply(Matriz, 2, mean) # Promedios de columnas
## col1 col2 col3
## 7.0 5.6 5.8
summary(Matriz) # Resumen estadístico de las columnas
## col1 col2 col3
## Min. :5 Min. :2.0 Min. :3.0
## 1st Qu.:6 1st Qu.:4.0 1st Qu.:4.0
## Median :7 Median :5.0 Median :7.0
## Mean :7 Mean :5.6 Mean :5.8
## 3rd Qu.:8 3rd Qu.:8.0 3rd Qu.:7.0
## Max. :9 Max. :9.0 Max. :8.0
var(Matriz) # Matriz de varianza covarianza
## col1 col2 col3
## col1 2.50 4.25 1.25
## col2 4.25 8.30 2.90
## col3 1.25 2.90 4.70
cor(Matriz) # Matriz de correlación
## col1 col2 col3
## col1 1.0000000 0.9329962 0.3646625
## col2 0.9329962 1.0000000 0.4643121
## col3 0.3646625 0.4643121 1.0000000
solve(var(Matriz)) # Inversa de la Matriz de varianza covarianza
## col1 col2 col3
## col1 3.2380952 -1.7301587 0.2063492
## col2 -1.7301587 1.0780423 -0.2050265
## col3 0.2063492 -0.2050265 0.2843915
eigen(var(Matriz)) # Valores y vectores propios
## eigen() decomposition
## $values
## [1] 11.9189751 3.3439221 0.2371028
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.4205324 -0.2518028 0.87163514
## [2,] 0.8143607 -0.3187584 -0.48498429
## [3,] 0.3999614 0.9137770 0.07101004
#--------------
# 7) Crear base de datos - data frames
datos <- data.frame(
"n" = 1:4, # Consecutivo
"indiv." = c("a", "b", "c", "d"), # Individuos
"sexo" = as.character(c("f","f","m","m")), # Sexo
"variable" = c(1.2, 3.4, 4.5, 5.6)) # Valor de la variable
datos # Impresión de los datos
head(datos) # Muestra los primeros datos
dim(datos) # Número de filas y de columnas
## [1] 4 4
length(datos) # Número de columnas
## [1] 4
names(datos) # Nombres de las columnas
## [1] "n" "indiv." "sexo" "variable"
str(datos) # Estructura de la base de datos
## 'data.frame': 4 obs. of 4 variables:
## $ n : int 1 2 3 4
## $ indiv. : chr "a" "b" "c" "d"
## $ sexo : chr "f" "f" "m" "m"
## $ variable: num 1.2 3.4 4.5 5.6
class(datos) # Tipo de estructura
## [1] "data.frame"
t(datos) # Transpuesta de la base de datos
## [,1] [,2] [,3] [,4]
## n "1" "2" "3" "4"
## indiv. "a" "b" "c" "d"
## sexo "f" "f" "m" "m"
## variable "1.2" "3.4" "4.5" "5.6"
is.data.frame(datos) # Verifica si datos es un data frame
## [1] TRUE
is.data.frame(Matriz) # Verifica si Matriz es un data frame
## [1] FALSE
Matriz
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## C 7 5 4
## D 8 9 8
## E 9 8 7
Matriz1 <- as.data.frame(Matriz) # Convertir la Matriz a un data frame
Matriz1
#--------------
# 8) Subconjuntos del data frame (datos)
datos
str(datos) # Estructura de la base de datos
## 'data.frame': 4 obs. of 4 variables:
## $ n : int 1 2 3 4
## $ indiv. : chr "a" "b" "c" "d"
## $ sexo : chr "f" "f" "m" "m"
## $ variable: num 1.2 3.4 4.5 5.6
names(datos) # Nombres de las columnas
## [1] "n" "indiv." "sexo" "variable"
datos$indiv. # Elementos de la columna "indv."
## [1] "a" "b" "c" "d"
datos[,'indiv.'] # Otra forma de hacer lo anterior
## [1] "a" "b" "c" "d"
datos[,c(1, 3)] # Columnas 1 y 3
datos[,-1] # Excluir columna 1
datos$variable >= 4 # Datos con esta condición
## [1] FALSE FALSE TRUE TRUE
datos[datos$variable >= 4, ] # Filas con esta condición
datos[datos$variable >= 4, c("indiv.", "variable")] # Variables con esa condición
subset(datos, variable >= 4) # Individuos con esa condición
attach(datos) # attach, permite llamar a las columnas solo dando sus nombres
datos[variable >= 4, ] # Comando resumido
detach(datos) # Para finalizar lo anterior
#--------------
# 9) Agregar columnas o filas al data frame (datos)
nivel <- factor(c("bajo","bajo","alto","alto")) # Factor generado
nivel
## [1] bajo bajo alto alto
## Levels: alto bajo
datos
datos$grupo <- nivel # nueva columna llamada "grupo"
datos
datos1 <- cbind(datos, group = nivel) # otra forma de incluir la nueva columna
datos1
#--------------
# 10) Data frame con valores aleatrorios
Matriz # Data frame para calculas sus promedios y desviaciones
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## C 7 5 4
## D 8 9 8
## E 9 8 7
media = colMeans(Matriz) # Promedios de las columnas
media
## col1 col2 col3
## 7.0 5.6 5.8
de= sqrt(var(Matriz)) # Desviaciones estándar de las columnas
de
## col1 col2 col3
## col1 1.581139 2.061553 1.118034
## col2 2.061553 2.880972 1.702939
## col3 1.118034 1.702939 2.167948
# Generador de números aleatorios: rnorm(n, media, de)
# *Cada corrida es independiente de la anterior
col1 <- abs(round(rnorm(10, 7.0, 1.6),3)) # Números aleatorios de la columna 1
col1
## [1] 6.577 6.355 7.046 9.084 6.718 7.400 7.858 7.907 8.905 4.006
col2 <- abs(round(rnorm(10, 5.6, 2.8),3)) # Números aleatorios de la columna 2
col2
## [1] 4.430 7.943 3.249 8.511 8.519 4.447 8.144 2.326 5.859 3.237
col3 <- abs(round(rnorm(10, 5.8, 2.2),3)) # Números aleatorios de la columna 3
col3
## [1] 8.223 4.556 3.045 3.459 10.149 4.366 7.891 8.024 4.776 8.570
Matriz2 <- cbind(col1, col2, col3) # Fusión de las columnas
Matriz2
## col1 col2 col3
## [1,] 6.577 4.430 8.223
## [2,] 6.355 7.943 4.556
## [3,] 7.046 3.249 3.045
## [4,] 9.084 8.511 3.459
## [5,] 6.718 8.519 10.149
## [6,] 7.400 4.447 4.366
## [7,] 7.858 8.144 7.891
## [8,] 7.907 2.326 8.024
## [9,] 8.905 5.859 4.776
## [10,] 4.006 3.237 8.570
Matriz2 <- data.frame(Matriz2) # Data Frame - Matriz2
Matriz2
str(Matriz2) # Estrutura del data frame
## 'data.frame': 10 obs. of 3 variables:
## $ col1: num 6.58 6.36 7.05 9.08 6.72 ...
## $ col2: num 4.43 7.94 3.25 8.51 8.52 ...
## $ col3: num 8.22 4.56 3.04 3.46 10.15 ...
x11() # Panel gráfico adicional
plot(Matriz2) # Figura de pares

plot(log10(Matriz2)) # Figura con transformación logarítmica

plot(sqrt(Matriz2)) # Figura con transformación cuadrática

#--------------
# 11) Otra opción de realizar data frame con valores aleatorios
Matriz # Dataframe para relacionar la numeración de cada fila
## col1 col2 col3
## A 5 2 7
## B 6 4 3
## C 7 5 4
## D 8 9 8
## E 9 8 7
# Generar 10 números aleatorios
Matriz3= sample( # Muestra a realizar (sample)
1:nrow(Matriz[1:5,]), # Filas de la base de datos (1:5)
size=10, # Valores aleatorios a generar
replace=TRUE) # Muestreo por reemplazamiento
Matriz3 # Los 10 números, representan el orden en que aparece cada observación
## [1] 2 3 3 5 3 3 3 1 4 4
Matriz3<- Matriz[Matriz3, ] # Data frame generado con 10 obs. aleatorias
Matriz3 <- data.frame(Matriz3) # Data Frame - Matriz3
head(Matriz3)
str(Matriz3) # Estructura de Matriz3
## 'data.frame': 10 obs. of 3 variables:
## $ col1: num 6 7 7 9 7 7 7 5 8 8
## $ col2: num 4 5 5 8 5 5 5 2 9 9
## $ col3: num 3 4 4 7 4 4 4 7 8 8
x11() # Panel gráfico adicional
plot(Matriz3) # Figura de pares

plot(log10(Matriz3)) # Figura con transformación logarítmica

plot(sqrt(Matriz3)) # Figura con transformación cuadrática

EJEMPLO 2
#--------------
# 1) Librerías requeridas
library(lattice)
library(ellipse)
# rnorm(n, media, DE)
pH <- abs(round(rnorm(100, 5.1, 2.1),3)) # 100 No. aleatorios de la variable pH
head(pH)
## [1] 6.583 5.581 2.825 1.400 4.744 5.377
O2 <- abs(round(rnorm(100, 5.1, 1.1),3)) # 100 No. aleatorios de la variable O2
head(O2)
## [1] 3.824 5.949 4.774 5.728 4.252 4.692
NO3 <- abs(round(rnorm(100, 0.4, 0.2),3)) # 100 No. aleatorios de la variable NO3
head(NO3)
## [1] 0.623 0.721 0.634 0.271 0.455 0.450
NO2 <- abs(round(rnorm(100, 0.4, 0.3),3)) # 100 No. aleatorios de la variable NO2
head(NO2)
## [1] 0.798 0.567 0.153 0.015 0.109 0.621
PO4 <- abs(round(rnorm(100, 0.2, 0.3),3)) # 100 No. aleatorios de la variable PO4
head(PO4)
## [1] 0.288 0.100 0.372 0.447 0.560 0.904
ambientales <- cbind(pH, O2, NO3, NO2, PO4) # Fusión de las columnas
ambientales <- data.frame(ambientales) # Data Frame - Matriz2
head(ambientales)
write.csv2(ambientales,"datos.csv") # write.csv: Guardar el archivo en *.csv
dir() # Directorio de trabajo
## [1] "Capítulo2.rmd" "Capítulo2_files" "datos.csv"
# Cargar la base de datos a R, como "datos1"
datos1 = read.csv2("datos.csv",row.names=1)
str(datos1) # Estructura de la base
## 'data.frame': 100 obs. of 5 variables:
## $ pH : num 6.58 5.58 2.83 1.4 4.74 ...
## $ O2 : num 3.82 5.95 4.77 5.73 4.25 ...
## $ NO3: num 0.623 0.721 0.634 0.271 0.455 0.45 0.36 0.184 0.196 0.459 ...
## $ NO2: num 0.798 0.567 0.153 0.015 0.109 0.621 0.446 0.435 0.716 0.419 ...
## $ PO4: num 0.288 0.1 0.372 0.447 0.56 0.904 0.409 0.389 0.657 0.116 ...
summary(datos1) # Resumen estadístico
## pH O2 NO3 NO2
## Min. : 0.188 Min. :1.958 Min. :0.0040 Min. :0.0020
## 1st Qu.: 3.930 1st Qu.:4.143 1st Qu.:0.2555 1st Qu.:0.2268
## Median : 5.361 Median :4.808 Median :0.3785 Median :0.4145
## Mean : 5.239 Mean :4.864 Mean :0.4020 Mean :0.4328
## 3rd Qu.: 6.537 3rd Qu.:5.555 3rd Qu.:0.5417 3rd Qu.:0.5745
## Max. :11.145 Max. :6.882 Max. :0.8970 Max. :1.3550
## PO4
## Min. :0.0040
## 1st Qu.:0.1125
## Median :0.2035
## Mean :0.2676
## 3rd Qu.:0.4108
## Max. :0.9040
#--------------------
# 2) Figuras
x11() # Panel gráfico
plot(datos1) # Figura de pares

pairs(datos1,col=1) # Figura de pares

hist(datos1$pH, xlab="Valores de pH", ylab="Frecuencia", # Histograma
cex.lab=1.5, main="",col="lightblue")

hist(sqrt(datos1$pH), xlab="Valores de pH", # Histograma con transformación cuadrática
ylab="Frecuencia",cex.lab=1.5, main="",
col="bisque")

x11()
plotcorr(cor(sqrt(datos1)),col="bisque")
