Como funciona R

R como calculadora

5+3
## [1] 8
15.3*23.4
## [1] 358.02
sqrt(16)
## [1] 4

Almacenado y nombres

producto=15.3*23.4
producto1<-15.3*23.4

Una vez que se guardan las variables, se las puede referenciar con otros operadores y funciones:

log(producto)
## [1] 5.880589
log10(producto)
## [1] 2.553907

<- se llama asignacion y se utiliza para crear una variable Los nombre validos para una variable son combinaciones de letras numeros

x <- (1:5) # bien escrito
x<-(1:5) # mal escrito

Generar Datos

seq(1, 5, 0.5) # seq genera secuencias de numeros reales
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq(1 ,5, 1)
## [1] 1 2 3 4 5
z <- scan() # sirve para ingresar valores 

z <- scan()
f <- scan()
rep(1, 20)
##  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
rep(1:3,30)
##  [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
## [36] 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1
## [71] 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
rep(seq(1:3),30)
##  [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
## [36] 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1
## [71] 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
rep(1:4,each = 2)
## [1] 1 1 2 2 3 3 4 4
rep(1:4,c(2,2,2,2))
## [1] 1 1 2 2 3 3 4 4
sum(x)
## [1] 15
prod(x)
## [1] 120
max(x)
## [1] 5
min(x)
## [1] 1
which.max(c(3,14,15,2)) #posicion del  maximo
## [1] 3
which(c(3,14,15,2)==3)
## [1] 1
which(c(3,14,15,2)==20)
## integer(0)
sort(x, decreasing = TRUE)
## [1] 5 4 3 2 1
fx <- function(x)
{
y <- x^2
cat("El Cuadrado de x es: ",y,"\n")
return(y)
}
fx(5)
## El Cuadrado de x es:  25
## [1] 25

Importando datos en R

Es importante fijar el directorio de trabajo

getwd() # Me dice el directorio actual
## [1] "d:/Users/Alex Paucar/Desktop"
setwd("d:/Users/Alex Paucar/Desktop/Módulo 1") # Fijo un nuevo directorio

Los archivos más usados para importación son:

  • Excel .xml (.csv)
  • Stata .dta
  • SPSS .sav

Stata Se requiere el paquete foreign

# install.packages("foreign")
library(foreign)

Vectores

(Casi) todo en R es un objeto

x <- c(1, 2, 3); y <- c("a", "b", "Hola")
z1 <- c(TRUE, TRUE, FALSE)
x  <-  9:29
x <- c(1+0i, 2+4i)

Mezclando Objetos

y <- c(1.7, "a")    ## character
y <- c(TRUE, 2)     ## numeric
y <- c("a", TRUE)   ## character

Cuando diferentes objetos son mezclados en un vector ocurre una coerción tal que el vector se de la misma clase. Se puede cambiar la clase de los objetos usando funciones del tipo

x <- 0:6
class(x)
## [1] "integer"
as.numeric(x)
## [1] 0 1 2 3 4 5 6
as.logical(x)
## [1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
as.character(x)
## [1] "0" "1" "2" "3" "4" "5" "6"
as.complex(x)
## [1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i

Álgebra de Vectores

a <- c(1,3,2)
a
## [1] 1 3 2
t(a)# trasponer
##      [,1] [,2] [,3]
## [1,]    1    3    2

Suma de vectores

Se suman los vectores uno a uno.

a <- c(1,3,2)
b <- c(2,8,9)
a+b
## [1]  3 11 11

Propiedades de indexación

Indexación

Extrae los elementos 1 y 3 de \(y\)

y <- c(1.2,3.9,0.4,0.12)
y[c(1,3)] 
## [1] 1.2 0.4

Se puede crear un filtro en otro vector

v <- 3:4
y[v]
## [1] 0.40 0.12

Se puede extraer duplicados

x <- c(4,2,17,5)
y <- x[c(1,1,3)] 
y
## [1]  4  4 17
z <- c(5,12,13) # excluir elementos
z[-1] 
## [1] 12 13
z[-1:-2] 
## [1] 13
z[1:length(z)-1]
## [1]  5 12
z[-length(z)]
## [1]  5 12

El operador “:”

i <- 2
(1:i)-1 # Esto significa (1:i) NO 1:(i-1)
## [1] 0 1
1:(i-1)
## [1] 1

Secuencias:

seq(from=12,to=30,by=3)
## [1] 12 15 18 21 24 27 30
seq(from=1.1,to=2,length=10)
##  [1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
x <- c(5,12,13);x
## [1]  5 12 13
seq(x)
## [1] 1 2 3
x <- NULL;x
## NULL
seq(x)
## integer(0)
length(seq(x))
## [1] 0

Repeticiones:

x <- {rep(8,4);x}
rep(c(5,12,13),3)
## [1]  5 12 13  5 12 13  5 12 13
length(rep(c(5,12,13),3))
## [1] 9
rep(c(5,12,13),each=2)# Se intercalan las copias de X
## [1]  5  5 12 12 13 13

Matrices y Dataframes

my_vector <- 1:20
dim(my_vector)
## NULL
dim(my_vector) <- c(4, 5)
my_vector
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20
class(my_vector)
## [1] "matrix"
my_matrix <- my_vector
patients <- c("Bill", "Gina", "Kelly", "Sean")
cbind(patients,my_matrix)
##      patients                       
## [1,] "Bill"   "1" "5" "9"  "13" "17"
## [2,] "Gina"   "2" "6" "10" "14" "18"
## [3,] "Kelly"  "3" "7" "11" "15" "19"
## [4,] "Sean"   "4" "8" "12" "16" "20"
my_data <- data.frame(patients, my_matrix)
cnames <- c("patient", "age", "weight", "bp", "rating", "test")
colnames(my_data) <- cnames

Desde luego, podemos crear un data frame directamente, por ejemplo

my.data.frame <- data.frame(
    ID = c("Carla", "Pedro",    "Laura"), 
    Edad = c(10, 25, 33), 
    Ingreso = c(NA, 34, 15),
    Sexo = c(TRUE, FALSE, TRUE),
  Etnia = c("Mestizo","Afroecuatoriana","Indígena")
)

Operaciones con matrices

m1 <- matrix(1, nr = 2, nc = 2) 
m2 <- matrix(2, nr = 2, nc = 2) 

rbind(m1, m2) 
##      [,1] [,2]
## [1,]    1    1
## [2,]    1    1
## [3,]    2    2
## [4,]    2    2
cbind(m1,m2)
##      [,1] [,2] [,3] [,4]
## [1,]    1    1    2    2
## [2,]    1    1    2    2

Arrays

x <- array(1:20, dim=c(4,5))

Factor

z <- factor(LETTERS[1:3], ordered = TRUE)
x <- factor(c("a", "b", "b", "a"))
x
## [1] a b b a
## Levels: a b
sex_char <- c("m", "m", "m")
sex_factor <- factor(sex_char, levels = c("m", "f"))

table(sex_char)
## sex_char
## m 
## 3
table(sex_factor)
## sex_factor
## m f 
## 3 0

Listas

x <- list(list(list(list())))
str(x)
## List of 1
##  $ :List of 1
##   ..$ :List of 1
##   .. ..$ : list()
is.recursive(x)
## [1] TRUE

c() combinará varias listas en una sola. Si se tiene una combinación de vectores y listas, c() coerciona a los vectores como listas antes de combinarlos. Compara los resultados de list() y c():

x <- list(list(1, 2), c(3, 4))
y <- c(list(1, 2), c(3, 4))
str(x)
## List of 2
##  $ :List of 2
##   ..$ : num 1
##   ..$ : num 2
##  $ : num [1:2] 3 4
str(y)
## List of 4
##  $ : num 1
##  $ : num 2
##  $ : num 3
##  $ : num 4

Missing Values

x <- c(1, 2, NA, 10, 3)
is.na(x)
## [1] FALSE FALSE  TRUE FALSE FALSE
is.nan(x)
## [1] FALSE FALSE FALSE FALSE FALSE
x <- c(1, 2, NaN, NA, 4)
is.na(x)
## [1] FALSE FALSE  TRUE  TRUE FALSE
is.nan(x)
## [1] FALSE FALSE  TRUE FALSE FALSE

Bucles

x <- 1:50000
y <- x^2
z=0
for (i in 1:50000) z[i] <- x[i]^2 

Procedimientos Gráficos

La función plot(x)

x <- seq(10,20,1)
plot(x)

La función plot(x,y)

y <- seq(30,40,1)
plot(x,y)