Operaciones con Vectores
options(warn = -1) # para no mostrar advertencias
x <- 5
x
## [1] 5
typeof(x) # el tipo del vector
## [1] "double"
length(x) # la longitud del vector
## [1] 1
y <- "SSL"
y
## [1] "SSL"
typeof(y)
## [1] "character"
length(y)
## [1] 1
# vectores
c(3,4,5,6) # c minuscula y ()
## [1] 3 4 5 6
c('a','b')
## [1] "a" "b"
c(T,F, TRUE,FALSE)
## [1] TRUE FALSE TRUE FALSE
# creamos un vector numerico de longitud 5
vector("numeric", 5)
## [1] 0 0 0 0 0
# creamos un vector logico de longitud 5
vector("logical", 5)
## [1] FALSE FALSE FALSE FALSE FALSE
# creamos un vector de caracteres de longitud 5
vector("character", 5)
## [1] "" "" "" "" ""
assign("claro", c(2, 4, 6, 8))
claro
## [1] 2 4 6 8
# para nombrar columnas de forma automatica
vec = c(6,1,3,6,10,5)
vec
## [1] 6 1 3 6 10 5
vec[5] # los corchetes son una puerta, la cual nos permite ingresar a un elemento del vector
## [1] 10
vec[1]
## [1] 6
vec[1] - vec[5]
## [1] -4
vec <- c(6, 1, 3, 6, 10, 5)
# elementos de la posición 2, 4, 6
vec[c(2, 4, 6)]
## [1] 1 6 5
vec[c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE)]
## [1] 1 6 5
vec[c(F, T, F, T, F, T)]
## [1] 1 6 5
dbl_vec = c(1,2.9,-1,8,15.6)
typeof(dbl_vec)
## [1] "double"
is.double(dbl_vec)
## [1] TRUE
int_vec = c(3L,7L,1L,14L,21L)
int_vec2 = c(3,7,1,14,21)
typeof(int_vec2)
## [1] "double"
# el prefijo as. nos sirve convertir
int_vec2 = as.integer(int_vec2)
typeof(int_vec2)
## [1] "integer"
codigo = c(3,7,1,14,21)
typeof(codigo)
## [1] "double"
codigo = as.character(codigo)
typeof(codigo)
## [1] "character"
codigo
## [1] "3" "7" "1" "14" "21"
# el prefijo is, nos sirve para preguntar
is.character(codigo)
## [1] TRUE
is.double(codigo)
## [1] FALSE
is.integer(codigo)
## [1] FALSE
is.logical(codigo)
## [1] FALSE
is.character(int_vec2)
## [1] FALSE
is.double(int_vec2)
## [1] FALSE
is.integer(int_vec2)
## [1] TRUE
is.logical(int_vec2)
## [1] FALSE
#fechas
fecha = '2020-05-19'
typeof(fecha)
## [1] "character"
Sys.Date()
## [1] "2021-05-23"
format(Sys.Date(), "%a %b %d")
## [1] "Sun May 23"
fecha=as.Date(fecha)
fecha
## [1] "2020-05-19"
# usar las posiciones de un vector
vec
## [1] 6 1 3 6 10 5
vec[2] = 89
vec[2]
## [1] 89
# reemplazar valores de un vector segun la posicion
vec[c(1,4,6)]=0
vec[c(1,4,6)]=c(123,456,789)
vec
## [1] 123 89 3 456 10 789
# cuantos elementos tiene un vector
length(vec)
## [1] 6
# eliminar elementos de un vector
vec[-2]
## [1] 123 3 456 10 789
vec = vec[-2]
length(vec)
## [1] 5
vec[-c(3,5)]
## [1] 123 3 10
vec
## [1] 123 3 456 10 789
vec = vec[-c(3,5)]
vec
## [1] 123 3 10
# secuencias de numeros
1:12
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
7:-5
## [1] 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5
100:0
## [1] 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83
## [19] 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65
## [37] 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47
## [55] 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29
## [73] 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11
## [91] 10 9 8 7 6 5 4 3 2 1 0
0:100
## [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## [19] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
## [37] 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
## [55] 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
## [73] 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
## [91] 90 91 92 93 94 95 96 97 98 99 100
# secuencias de numeros personalizadas
seq(from = 1, to =12, by=3)
## [1] 1 4 7 10
seq(from = -2, to = 3, by = 0.1)
## [1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6
## [16] -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
## [31] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4
## [46] 2.5 2.6 2.7 2.8 2.9 3.0
seq(from = -4, to = 4, length = 12)
## [1] -4.0000000 -3.2727273 -2.5454545 -1.8181818 -1.0909091 -0.3636364
## [7] 0.3636364 1.0909091 1.8181818 2.5454545 3.2727273 4.0000000
seq(from= 10, to=100, length= 50)
## [1] 10.00000 11.83673 13.67347 15.51020 17.34694 19.18367 21.02041
## [8] 22.85714 24.69388 26.53061 28.36735 30.20408 32.04082 33.87755
## [15] 35.71429 37.55102 39.38776 41.22449 43.06122 44.89796 46.73469
## [22] 48.57143 50.40816 52.24490 54.08163 55.91837 57.75510 59.59184
## [29] 61.42857 63.26531 65.10204 66.93878 68.77551 70.61224 72.44898
## [36] 74.28571 76.12245 77.95918 79.79592 81.63265 83.46939 85.30612
## [43] 87.14286 88.97959 90.81633 92.65306 94.48980 96.32653 98.16327
## [50] 100.00000
# operaciones logicas
# TRUE o T sigifica Verdadero o Si
# FALSE o F sigifica Falso o No
45==67 # el elemento de la derecha es igual al de la izquierda?
## [1] FALSE
45==45 # el elemento de la derecha es igual al de la izquierda?
## [1] TRUE
45!=45 # el elemento de la derecha es diferente al de la izquierda?
## [1] FALSE
56!=45 # el elemento de la derecha es diferente al de la izquierda?
## [1] TRUE
# & # significa "y"
#| # significa "o"
# funcion para extraer la media o promedio de un vector
mean(c(1:99))
## [1] 50
# coreción de tipos de datos, generador de valores perdidos
# si hay datos numericos con texto
c(1:9,'juan')
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "juan"
# coreción de tipos de datos, generador de valores perdidos
# si hay datos booleanos y texto
c(T,T,T,F,'JUAN')
## [1] "TRUE" "TRUE" "TRUE" "FALSE" "JUAN"
# en r, hay distincion entre mayusculas
# y minusculas para nombrar vectores
vec = c('ss1',12,T,F)
all(vec) # todos los datos del vector son del mismo tipo?
## [1] FALSE
vec
## [1] "ss1" "12" "TRUE" "FALSE"
Vec = c(0.5, 2L, TRUE, FALSE)
all(Vec) # todos los datos del vector son del mismo tipo?
## [1] FALSE
Vec
## [1] 0.5 2.0 1.0 0.0
VEC = c(5L, 2L, TRUE, FALSE)
VEC
## [1] 5 2 1 0
VEC_1 = c(5L, 2L)
VEC_1
## [1] 5 2
all(VEC_1)
## [1] TRUE
# coerción directa: double a character
vec <- c(1.7, 5, 8.2, 15.1)
vec + 6
## [1] 7.7 11.0 14.2 21.1
vec1 <- as.character(vec)
#vec1 + 6 # las operaciones numericas solo pueden aplicarse a datos numericos
sum(vec)
## [1] 30
#sum(vec1) # las operaciones numericas solo pueden aplicarse a datos numericos
mean(vec)
## [1] 7.5
#mean(vec1) # las operaciones numericas solo pueden aplicarse a datos numericos
# NA significa valor perdido
vec = c('ss1',12,T,F)
vec
## [1] "ss1" "12" "TRUE" "FALSE"
vec_error=as.numeric(vec) # cuando coercionamos datos que no son compatibles generan valores perdidos
vec_error
## [1] NA 12 NA NA
sum(is.na(vec_error))
## [1] 3
# un vector se puede generar uniendo vectores
c(1, c(2, c(3,4)))
## [1] 1 2 3 4
c(1,2,3,4)
## [1] 1 2 3 4
c(c(1,2,3),c(5,6,7)) # vectores anidados
## [1] 1 2 3 5 6 7
# tablas de excel = data.frame
Tabla1 = data.frame('col_1'=c(1,2,3),
'col_2'=c('R','S','T'),
'col_3'=c(T,F,T),
stringsAsFactors = F # no asuma que mis columnas de tipo character son categoricas
)
str(Tabla1)
## 'data.frame': 3 obs. of 3 variables:
## $ col_1: num 1 2 3
## $ col_2: chr "R" "S" "T"
## $ col_3: logi TRUE FALSE TRUE
# factor, datos categoricos
# las variables categoricos tienen categorias
# o etiquetas
# tienen un numero pequeño de etiquetas o categorias
sexo = c(rep('M',5),rep('F',9),'OTRO')
sexo
## [1] "M" "M" "M" "M" "M" "F" "F" "F" "F" "F"
## [11] "F" "F" "F" "F" "OTRO"
table(sexo) # la funcion table, nos permite encontrar la tabla de frecuencias
## sexo
## F M OTRO
## 9 5 1
SEXO = as.factor(sexo)
SEXO
## [1] M M M M M F F F F F F F F F OTRO
## Levels: F M OTRO
CALIFICACION = c(rep('a',3),
rep('g',7),
rep('j',15))
# a es malo
# g es regular
# j es bueno
CALIFICACION
## [1] "a" "a" "a" "g" "g" "g" "g" "g" "g" "g" "j" "j" "j" "j" "j" "j" "j" "j" "j"
## [20] "j" "j" "j" "j" "j" "j"
table(CALIFICACION)
## CALIFICACION
## a g j
## 3 7 15
factor(CALIFICACION,ordered = T,
labels = c('a','g','j'))
## [1] a a a g g g g g g g j j j j j j j j j j j j j j j
## Levels: a < g < j
Operaciones con texto
# funcion paste
paste("El saldo a pagar es: $", 230+560)
## [1] "El saldo a pagar es: $ 790"
paste("Curso", "Limpieza", "Datos", sep = "-")
## [1] "Curso-Limpieza-Datos"
paste(c("a", "b", "c"), c("1r", "2r", "3r"), sep="")# los vectores a fusionar deben ser de la misma longitud
## [1] "a1r" "b2r" "c3r"
paste("Nombre y apellido:",c("Karen", "Luis", "Jenny"), c("Calva", "Torres", "Aguirre"), sep=" ")
## [1] "Nombre y apellido: Karen Calva" "Nombre y apellido: Luis Torres"
## [3] "Nombre y apellido: Jenny Aguirre"
texto_split <- strsplit(c("Ecuador","Perú","Venezuela","Colombia","Brasil","Bolivia",
"Paraguay","Uruguay"), split="")
texto_split
## [[1]]
## [1] "E" "c" "u" "a" "d" "o" "r"
##
## [[2]]
## [1] "P" "e" "r" "ú"
##
## [[3]]
## [1] "V" "e" "n" "e" "z" "u" "e" "l" "a"
##
## [[4]]
## [1] "C" "o" "l" "o" "m" "b" "i" "a"
##
## [[5]]
## [1] "B" "r" "a" "s" "i" "l"
##
## [[6]]
## [1] "B" "o" "l" "i" "v" "i" "a"
##
## [[7]]
## [1] "P" "a" "r" "a" "g" "u" "a" "y"
##
## [[8]]
## [1] "U" "r" "u" "g" "u" "a" "y"
strsplit('Karen Calva',' ')
## [[1]]
## [1] "Karen" "Calva"
strsplit('Karen_Calva','_')
## [[1]]
## [1] "Karen" "Calva"
texto_split <- strsplit(c("Ecuador","Perú","Venezuela","Colombia","Brasil","Bolivia",
"Paraguay","Uruguay"), split=" ")
texto_split
## [[1]]
## [1] "Ecuador"
##
## [[2]]
## [1] "Perú"
##
## [[3]]
## [1] "Venezuela"
##
## [[4]]
## [1] "Colombia"
##
## [[5]]
## [1] "Brasil"
##
## [[6]]
## [1] "Bolivia"
##
## [[7]]
## [1] "Paraguay"
##
## [[8]]
## [1] "Uruguay"
library(stringr)
texto<-c("¡Ecuador!","¿Perú?","Venezuela_","....Colombia","$Brasil$","%Bolivia&",
"!!Paraguay=","((Uruguay))")
gsub("([[:punct:]])","",texto)
## [1] "Ecuador" "Perú" "Venezuela" "Colombia" "Brasil" "Bolivia"
## [7] "Paraguay" "Uruguay"
texto1<-c("¡Ecuador!24","¿Perú?45","Venezuela_67","....67.89.89Colombia,","$B67rasil$","%Boli90via&",
"!!Paragu567890ay=","((Urug345_8uay))")
# Eliminar signos de puntuacion
texto1<-gsub("([[:punct:]])","",texto1)
texto1
## [1] "Ecuador24" "Perú45" "Venezuela67" "678989Colombia"
## [5] "B67rasil" "Boli90via" "Paragu567890ay" "Urug3458uay"
# eliminar numeros
texto2<-gsub("\\d+","",texto1)
texto2
## [1] "Ecuador" "Perú" "Venezuela" "Colombia" "Brasil" "Bolivia"
## [7] "Paraguay" "Uruguay"
# extraer numeros
texto3<-gsub("\\D","",texto1)
texto3
## [1] "24" "45" "67" "678989" "67" "90" "567890" "3458"
#Syntax Description
ejemplo<-c(" 123456ECU","$%&EPN","5678 8
","perr!o")
ejemplo
## [1] " 123456ECU" "$%&EPN" "5678 8 \n "
## [4] "perr!o"
#\\d sin Digitos, 0,1,2 ... 9
gsub("\\d","",ejemplo)
## [1] " ECU" "$%&EPN" " \n "
## [4] "perr!o"
#\\D Solo los Digitos
gsub("\\D","",ejemplo)
## [1] "123456" "" "56788" ""
#\\s sin Espacios
gsub("\\s","",ejemplo)
## [1] "123456ECU" "$%&EPN" "56788" "perr!o"
#\\S solo espacios
gsub("\\S","",ejemplo)
## [1] " " "" " \n "
## [4] ""
#\\w solo caracteres
gsub("\\w","",ejemplo)
## [1] " " "$%&" " \n "
## [4] "!"
#\\W no caracteres
gsub("\\W","",ejemplo)
## [1] "123456ECU" "EPN" "56788" "perro"
#\\t sin Tab
gsub("\\t","",ejemplo)
## [1] " 123456ECU" "$%&EPN" "5678 8 \n "
## [4] "perr!o"
#\\n sin saltos de linea
gsub("\\n","",ejemplo)
## [1] " 123456ECU" "$%&EPN" "5678 8 "
## [4] "perr!o"
ejemplo2<-c("1234556","UIO87787","565465uio")
ejemplo2
## [1] "1234556" "UIO87787" "565465uio"
#\ para caracteres especiales, \\ is "\", \+ is "+"
#[ab] a o b, cuando queremos elementos con alguna coincidencia
# extrae el patron 12 de cada elemento
gsub("[12]","",ejemplo2)
## [1] "34556" "UIO87787" "565465uio"
#[^ab] extrae todo caracter excepto a y b
gsub("[^12]","",ejemplo2)
## [1] "12" "" ""
#[0-9] extrae todo excepto los digitos
gsub("[0-9]","",ejemplo2)
## [1] "" "UIO" "uio"
#[A-Z] extrae todas las letras mayúsculas desde la A hasta la Z
gsub("[A-Z]","",ejemplo2)
## [1] "1234556" "87787" "565465uio"
#[a-z] extrae todas las letras minusculas desde la a hasta la z
gsub("[a-z]","",ejemplo2)
## [1] "1234556" "UIO87787" "565465"
#[A-z] extrae mayusculas y minusculas desde la a hasta la z
gsub("[A-z]","",ejemplo2)
## [1] "1234556" "87787" "565465"
#i+ extrae i al menos una vez
gsub("7+","",ejemplo2)
## [1] "1234556" "UIO88" "565465uio"
#i{n} extrae i cuando ocurre n veces en una secuencia
gsub("7{2}","",ejemplo2)
## [1] "1234556" "UIO887" "565465uio"
#[:alnum:] caracteres alfanuméricos (letras y numeros): [:alpha:] and [:digit:]
#[:alpha:] caracteres alfabeticos: [:lower:] and [:upper:]
#[:blank:] caracteres en blanco e.g. space, tab
#[:digit:] Digitos: 0 1 2 3 4 5 6 7 8 9
#[:graph:] caracteres graficos: [:alnum:] and [:punct:]
#[:lower:] letras minusculas
#[:print:] caracteres de impresion: [:alnum:], [:punct:] and space
#[:punct:] caracteres de puntuacion: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
#[:space:] espacios: tab, newline, vertical tab, form feed, carriage return, space
#[:upper:] letras mayusculas
#[:xdigit:] digitos Hexadecimales: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
# reemplazamos u con U en el texto
chartr("u", "U", "Ecuador se encuentra en Sudamérica")
## [1] "EcUador se encUentra en SUdamérica"
chartr("Ecuador", "ECUADOR", "Ecuador se encuentra en Sudamérica")
## [1] "ECUADOR se enCUentRA en SUDAméRiCA"
chartr("c", "C", "Ecuador se encuentra en Sudamérica") #sustituir total
## [1] "ECuador se enCuentra en SudamériCa"
# si trabajamos las fechas como texto
fecha<-c("04/06/2016","03/08/2015","01/10/2016","03/12/2015","07/08/2015","14/09/2015")
dia<-substr(fecha, start = 1, stop = 2)
dia
## [1] "04" "03" "01" "03" "07" "14"
mes<-substr(fecha,start = 4,stop = 5)
mes
## [1] "06" "08" "10" "12" "08" "09"
año<-substr(fecha,7,10)
año
## [1] "2016" "2015" "2016" "2015" "2015" "2015"
nombre<-c("Ana María","Jose Luis","Angelica María")
library(stringr)
primer_nombre<-word(nombre,1)
primer_nombre
## [1] "Ana" "Jose" "Angelica"
segundo_nombre<-word(nombre,2)
segundo_nombre
## [1] "María" "Luis" "María"
provincia<-c("Ciudad de Quito","Ciudad de Manta","Ciudad de Zamora","Ciudad de Guayaquil")
provincia<-word(provincia,-1)
provincia
## [1] "Quito" "Manta" "Zamora" "Guayaquil"
x<-c("a","b","c","d","e")
y<-c("A","B","C","D","E")
res <- rbind(x,y) #rbind sirve para unir columnas de datos como filas
res
## [,1] [,2] [,3] [,4] [,5]
## x "a" "b" "c" "d" "e"
## y "A" "B" "C" "D" "E"
class(res)
## [1] "matrix"
dim(res)
## [1] 2 5
cbind(x,y) #rbind sirve para unir filas de datos como columnas
## x y
## [1,] "a" "A"
## [2,] "b" "B"
## [3,] "c" "C"
## [4,] "d" "D"
## [5,] "e" "E"
dx <- data.frame(A=letters[1:2], B=c(3, 9)) #letters R guarda todas las letras del abecedario
#para unir bases de datos deben tener el mismo nombre
dy <- data.frame(A=letters[4:5], B=c(1, 4))
dres <- rbind(dx, dy)#rbind une por filas
res
## [,1] [,2] [,3] [,4] [,5]
## x "a" "b" "c" "d" "e"
## y "A" "B" "C" "D" "E"
class(dres)
## [1] "data.frame"
dim(dres)
## [1] 4 2
x <- c(1, 2, 3)
y <- c(4, 5, 6)
res <- cbind(x,y)#cbind une por columnas
res
## x y
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
class(res)
## [1] "matrix"
dim(res)
## [1] 3 2
dx <- data.frame(A=letters[1:3], B=c(3, 9, 2))
dy <- data.frame(A=letters[4:6], B=c(1, 4, 6))
dres <- cbind(dx, dy)#cbind une por columnas
dres
## A B A B
## 1 a 3 d 1
## 2 b 9 e 4
## 3 c 2 f 6
class(dres)
## [1] "data.frame"
dim(dres)
## [1] 3 4
A <- data.frame(letter=LETTERS[1:4], a=1:4)
B <- data.frame(letter=LETTERS[sample(6)], x=runif(6))
A
## letter a
## 1 A 1
## 2 B 2
## 3 C 3
## 4 D 4
B
## letter x
## 1 D 0.2120672
## 2 B 0.3047717
## 3 E 0.0704727
## 4 F 0.8627476
## 5 C 0.8475665
## 6 A 0.6887309
merge(A, B)#cuando se usa merge para dos bases de datos, identifica una columna y une la base de datos con respecto a la columna, únicamente de la columnna en común
## letter a x
## 1 A 1 0.6887309
## 2 B 2 0.3047717
## 3 C 3 0.8475665
## 4 D 4 0.2120672
merge(A, B, all=TRUE)#une toda la información y si no encuentra NA
## letter a x
## 1 A 1 0.6887309
## 2 B 2 0.3047717
## 3 C 3 0.8475665
## 4 D 4 0.2120672
## 5 E NA 0.0704727
## 6 F NA 0.8627476
bdd1 <- data.frame(name=c("Luis", "Jose", "David", "Dario"), edad=c(20, 35, 43, 29))
bdd1
## name edad
## 1 Luis 20
## 2 Jose 35
## 3 David 43
## 4 Dario 29
bdd2 <- data.frame(nombres=c("Pepe", "Jose", "Lucas", "Luis", "Dario", "Sergio"),
estcivil=c("S", "C", "S", "V", "S", "C"))
bdd2
## nombres estcivil
## 1 Pepe S
## 2 Jose C
## 3 Lucas S
## 4 Luis V
## 5 Dario S
## 6 Sergio C
bdd3 <- data.frame(edad=c(18, 20, 35, 40, 45), sueldo=c(500, 620, 750, 890, 1200))
bdd3
## edad sueldo
## 1 18 500
## 2 20 620
## 3 35 750
## 4 40 890
## 5 45 1200
merge(bdd1, bdd2, by.x="name", by.y="nombres", all=T)#columnas con diferentes elementos
## name edad estcivil
## 1 Dario 29 S
## 2 David 43 <NA>
## 3 Jose 35 C
## 4 Luis 20 V
## 5 Lucas NA S
## 6 Pepe NA S
## 7 Sergio NA C
merge(bdd1, bdd3, by="edad")
## edad name sueldo
## 1 20 Luis 620
## 2 35 Jose 750
match(c("B", "E"), LETTERS) #posiciones de elementos iguales
## [1] 2 5
match(c("B", "3", "E"), c("3", "A", "5", "B", "F", "P"))#búsqueda de patrones, devuelde la posición
## [1] 4 1 NA
c("B", "E") %in% LETTERS #busca el patrón con true o false, no da posiciones
## [1] TRUE TRUE
c("B", "3", "E") %in% LETTERS
## [1] TRUE FALSE TRUE
vec <- c(3.4, 0.7, -7.1)
typeof(vec)
## [1] "double"
vec <- c(5, 5, 9)
typeof(vec)
## [1] "double"
vec <- c(5L, 5L, 9L)
typeof(vec)
## [1] "integer"
vec <- c("a","h", "b")
typeof(vec)
## [1] "character"
vec <- c(2+1i, 0, -3i)
typeof(vec)
## [1] "complex"
vec <- c(3.5, 2.6, 4.1, 2.7, 3.9, 5.0, 0.8, 1.1, 4.5,NA)
mean(vec)
## [1] NA
mean(vec, na.rm = TRUE)#asigna al NA la media de los otros elementos, para conservar el comportamiento del conjunto de datos
## [1] 3.133333
sd(vec)
## [1] NA
sd(vec, na.rm = TRUE)#conserva la desviación estándar del conjunto de datos y lo asigna a NA
## [1] 1.460308
vec <- c(3.5, 2.6, 4.1, 2.7, 3.9, 5.0, NA, 1.1, NA)
vec[!is.na(vec)]#borra las NA de las datos
## [1] 3.5 2.6 4.1 2.7 3.9 5.0 1.1
which(is.na(vec))#devuelve la posición de los NA
## [1] 7 9
sum(is.na(vec))#cuántos son valores perdidos
## [1] 2
sum(!is.na(vec))#cuántos están completos, no tienen NA
## [1] 7
vec <- c(2,2,2,3,6,4,2,8,2,3,8,9,3,2,4,8,2,3,5,6,7)
unique(vec)#cuenta los datos únicos
## [1] 2 3 6 4 8 9 5 7
length(vec)
## [1] 21
length(unique(vec))
## [1] 8
table(vec)#frecuencias de los datos
## vec
## 2 3 4 5 6 7 8 9
## 7 4 2 1 2 1 3 1
sort(unique(vec))#ordena los datos y devuelve los valores de forma ascendete
## [1] 2 3 4 5 6 7 8 9
sort(unique(vec), decreasing = T)#ordena los datos de forma descendente
## [1] 9 8 7 6 5 4 3 2
vec <- c(2,3,6,4,1,2,8,2,3,8,1,3,2,4,8,2)
duplicated(vec)#devuelve vector lógico de duplicados
## [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE
# cantidad de valores duplicados
sum(duplicated(vec))
## [1] 10
vec[duplicated(vec)]#elementos de la columna que tiene duplicados
## [1] 2 2 3 8 1 3 2 4 8 2
data <- data.frame(name=c("A", "B", "C", "D", "E", "F", "G"),
edad=c(18, 12, 42, 29, 47, 32, 25),
hijos=c(1, 0, 4, 2, 3, 2, 0))
data
## name edad hijos
## 1 A 18 1
## 2 B 12 0
## 3 C 42 4
## 4 D 29 2
## 5 E 47 3
## 6 F 32 2
## 7 G 25 0
#creación de variables mediantes condicionales
data$d_hijos <- ifelse(data$hijos==0, "SIN HIJOS", "CON HIJOS")#$ para crear una variable dentro de un data frame,
View(data)
data$grupo <- ifelse(data$edad<=18, "[0-18]", ifelse(data$edad>18 & data$edad<=45,
"[19-45]", "[46-100]"))
#crea una nueva variable, y va asignando varios criterios
data
## name edad hijos d_hijos grupo
## 1 A 18 1 CON HIJOS [0-18]
## 2 B 12 0 SIN HIJOS [0-18]
## 3 C 42 4 CON HIJOS [19-45]
## 4 D 29 2 CON HIJOS [19-45]
## 5 E 47 3 CON HIJOS [46-100]
## 6 F 32 2 CON HIJOS [19-45]
## 7 G 25 0 SIN HIJOS [19-45]
head(data, n=4)#muestra las 4 primeras filas
## name edad hijos d_hijos grupo
## 1 A 18 1 CON HIJOS [0-18]
## 2 B 12 0 SIN HIJOS [0-18]
## 3 C 42 4 CON HIJOS [19-45]
## 4 D 29 2 CON HIJOS [19-45]
data$lista <- ifelse(data$name %in% c("A", "B"), 1,
ifelse(data$name %in% c("C", "D", "E"), 2, 3))
#%in% pregunta está o no
data
## name edad hijos d_hijos grupo lista
## 1 A 18 1 CON HIJOS [0-18] 1
## 2 B 12 0 SIN HIJOS [0-18] 1
## 3 C 42 4 CON HIJOS [19-45] 2
## 4 D 29 2 CON HIJOS [19-45] 2
## 5 E 47 3 CON HIJOS [46-100] 2
## 6 F 32 2 CON HIJOS [19-45] 3
## 7 G 25 0 SIN HIJOS [19-45] 3
head(data, n=3)
## name edad hijos d_hijos grupo lista
## 1 A 18 1 CON HIJOS [0-18] 1
## 2 B 12 0 SIN HIJOS [0-18] 1
## 3 C 42 4 CON HIJOS [19-45] 2
library(car)
## Loading required package: carData
data2 <- data.frame(name=c("Ed", "Bill", "Camy", "Diego", "Edy", "Fer", "Giu"),
lista=c(2, 1, 4, 3, 5, 3, 2),
panel=c(1, 0, 2, 2, 1, 2, 0))
data2$new_list <- recode(data2$panel,'0=100; 1=101; else=102')
head(data, n=4)
## name edad hijos d_hijos grupo lista
## 1 A 18 1 CON HIJOS [0-18] 1
## 2 B 12 0 SIN HIJOS [0-18] 1
## 3 C 42 4 CON HIJOS [19-45] 2
## 4 D 29 2 CON HIJOS [19-45] 2
vec <- c(1.2, 3.2, 4.5, 2.7, 6.1, 9.3, 8.3, 7.2, 11.4, 10.9)
cortes1 <- cut(vec, breaks=c(0, 3, 6, 12, 15))
cortes1
## [1] (0,3] (3,6] (3,6] (0,3] (6,12] (6,12] (6,12] (6,12] (6,12] (6,12]
## Levels: (0,3] (3,6] (6,12] (12,15]
table(cortes1)
## cortes1
## (0,3] (3,6] (6,12] (12,15]
## 2 2 6 0
prop.table(table(cortes1))
## cortes1
## (0,3] (3,6] (6,12] (12,15]
## 0.2 0.2 0.6 0.0
vec <- c(-0.4, 1.2, 5.2, 4.1, -2.7, 6.9, 9.1, -0.4, 8.3, 7.2, 3.6, 11.4, 10.9)
cortes2 <- cut(vec, breaks=c(-5, 0, 5, 10, 15), labels=c("De -5 a 0", "De 0 a 5", "De 5 a 10", "De 10 a 15"))
table(cortes2)
## cortes2
## De -5 a 0 De 0 a 5 De 5 a 10 De 10 a 15
## 3 3 5 2
round(100*prop.table(table(cortes2)), 2)
## cortes2
## De -5 a 0 De 0 a 5 De 5 a 10 De 10 a 15
## 23.08 23.08 38.46 15.38
# muestras
sample(c(3,5,7,8), size=3)
## [1] 5 3 8
sample(c(3,5,7,8), size=3, prob=c(0.1, 0.2, 0.3, 0.4))
## [1] 8 5 7
muestra <- sample(1:300, size=60, replace=FALSE)
muestra
## [1] 299 297 132 237 287 121 142 270 177 9 257 167 66 173 275 199 42 118 78
## [20] 292 198 47 186 31 10 184 140 27 232 258 276 113 252 119 221 260 114 29
## [39] 95 33 130 265 133 241 298 285 143 106 277 291 49 255 169 63 123 279 40
## [58] 89 154 64
sum(duplicated(muestra))
## [1] 0
muestra[duplicated(muestra)]
## integer(0)
muestra <- sample(1:300, size=60, replace=TRUE)
muestra
## [1] 163 117 240 89 242 161 74 210 153 256 38 231 296 116 274 277 289 78 70
## [20] 164 193 31 196 273 266 148 239 246 206 279 209 64 177 161 27 295 26 299
## [39] 30 160 291 26 7 293 58 170 220 28 52 115 299 202 133 54 42 86 185
## [58] 169 174 127
sum(duplicated(muestra))
## [1] 3
muestra[duplicated(muestra)]
## [1] 161 26 299