David Torres Irribarra, Alén Amigo Quintana e Isidora Naranjo López
Published
April 4, 2024
Recodificando datosvariables
Existen múltiples formas de recodificar variables en R. Vamos a examinar brevemente algunas alternativas para recodificar variables categóricas, ordinales y variables numéricas.
Variables con categorías o pocos valores
A continuación, trabajaremos con la base de datos ´titanic´ para aprender a recodificar variables categóricas. Por ejemplo, podríamos querer recodificar la variable clase (Pclass), originalmente codificada con valores 1, 2 y 3 en una nueva variable con las categorías “Primera clase”, “Segunda clase” y “Tercera clase”.
Un primer método utilizando comandos básicos de R requiere múltiples comandos, uno para cada categoría.
# Leemos y guardamos la base de datos en el objeto titanictitanic <-read.csv("https://david-ti.github.io/introstats/data/titanic.csv")# Veamos los valores originalestable(titanic$Pclass)
1 2 3
216 184 491
# Creamos una nueva variable vacia para guardar los valores recodificadostitanic$ClaseTexto <-NA# Ahora generamos los valores recodificadostitanic$ClaseTexto[titanic$Pclass ==1] <-"Primera clase"titanic$ClaseTexto[titanic$Pclass ==2] <-"Segunda clase"titanic$ClaseTexto[titanic$Pclass ==3] <-"Tercera clase"# Revisamos la recodificacióntable(titanic$Pclass,titanic$ClaseTexto)
Primera clase Segunda clase Tercera clase
1 216 0 0
2 0 184 0
3 0 0 491
Un segundo método usa la función switch para recodificar en un solo comando.
# Recodificamos la variable Pclass de la tabla titanic en una nueva variable en la misma tabla "ClaseTexto2"titanic$ClaseTexto2 <-sapply(titanic$Pclass, function(x) {switch(as.character(x),"1"="Primera clase","2"="Segunda clase","3"="Tercera clase",NA) # Handles unexpected cases or missing data})table(titanic$Pclass,titanic$ClaseTexto2)
Primera clase Segunda clase Tercera clase
1 216 0 0
2 0 184 0
3 0 0 491
# Podemos también combinar categorías, guardando esta vez el resultado en la variable "TerceraClase" en la tabla titanictitanic$TerceraClase <-sapply(titanic$Pclass, function(x) {switch(as.character(x),"1"="Otra clase","2"="Otra clase","3"="Tercera clase",NA) # Handles unexpected cases or missing data})table(titanic$Pclass,titanic$TerceraClase)
Otra clase Tercera clase
1 216 0
2 184 0
3 0 491
Variables cuantitativas con muchos valores
Si queremos recodificar una variable cuantitativa con muchos valores es más fácil definir rangos que indicar por separado la nueva categoría para cada valor posible.
En estos casos podemos también usar formas distintas. A continuación se muestran dos alternativas para recodificar la variable Age (edad) en dos tres categorias. Vamos a dividir la variable cuantitativa edad en una categoria de “Niñas y niños” (menos de 13 años), “Adolecentes” (13 a menos de 18) y “Adultos” (18 y más).
La primera alternativa especificando condiciones lógicas.
# Creamos una nueva variable vacia para guardar los valores recodificadostitanic$Edad_Niveles <-NA# Ahora generamos los valores recodificadostitanic$Edad_Niveles[titanic$Age <13] <-"Niñas&Niños"titanic$Edad_Niveles[titanic$Age >=13& titanic$Age <18] <-"Adolescentes"titanic$Edad_Niveles[titanic$Age >=18] <-"Adultos"# Revisamos la recodificacióntable(titanic$Age,titanic$Edad_Niveles)
La segunda alternativa usando el comando cut (cortar) que toma en el argumento breaks los puntos en los cuales queremos dividir la variable. En este caso, las divisiones son:
0: El valor minimo de la primera categoría
13: El limite entre la primera y segunda categoría
18: El limite entre la segunda y tercera categoría
80: El valor máximo de la tercera categoría
Por defecto, cut incluira cada valor los valores en la categoría de más abajo. Vale decir, personas de 13 años serían incluidas en la categoría “Niñas y niños” y personas de 18 serían incluidas como “Adolecentes”. Esto se debe a que el argumento right (derecha) esta activado por defecto, indicando que el valor “a la derecha” de la categoría debe ser incluido. Para cambiar este comportamiento basta con que indiquemos right = FALSE.
# Usamos cut para crear los nivelestitanic$Edad_Niveles2 <-cut(titanic$Age, breaks =c(0,13,18,80) ,right =FALSE)# Revisamos la recodificacióntable(titanic$Age,titanic$Edad_Niveles2)
Una variable indicadora o dummy es aquella que toma el valor 1 o 0 para indicar la presencia o ausencia de una cierta característica o condición. Durante el desarrollo del curso será necesario emplear el uso de estas variables. A continuación, se muestran dos ejemplos, uno para el caso de variables dicotómicas (aquellas variables que pueden adquirir 2 valores) y otro para el caso de variables politómicas (aquellas variables que puedes adquiriri 3 o más valoresr).
Variables dicotómicas
Variables politómicas
Resultado del lanzamiento de una moneda (cara, sello)
Nacionalidad (Chilena, Argentina, Uruguaya, otra)
Sexo biológico (Femenino, Masculino)
Cantidad de hermanos (0, 1, 2, 3, 4 o más)
Ausencia/presencia de un atributo (0, 1)
Nivel socio-económico (bajo, medio, alto)
Para transformar una variable dicotómica a una variable dummy utilizaremos como ejemplo la variable Age de la base de datos titanic. Recodificaremos la variable para que tenga solo dos grupos. Un grupo va a contener a niñas, niños y adolescentes y el otro a los adultos.
# Creamos una nueva variable vacia para guardar los valores recodificadostitanic$Edad_Niveles3 <-NA# Ahora generamos los valores recodificadostitanic$Edad_Niveles3[titanic$Age <18] <-"NNA"titanic$Edad_Niveles3[titanic$Age >=18] <-"Adultos"# Revisamos la recodificacióntable(titanic$Age,titanic$Edad_Niveles3)
Ahora que hemos creado una variable dicotómica la vamos a trasformar en una variable dummy.
# Señalamos que deseamos que los niños, niñas y adolescentes tengan un valor 1 en la variable dummy dummy_ageNNA <-as.numeric(titanic$Edad_Niveles3 =="NNA")# Revisamos la recodificacióntable(titanic$Edad_Niveles3)
Adultos NNA
601 113
table(dummy_ageNNA)
dummy_ageNNA
0 1
601 113
Para transformar una variable politómica a una variable dummy utilizaremos como ejemplo la variable Edad_niveles creada anteriormente en la base de datos titanic.
# Recordamos la variable recodificadatable(titanic$Edad_Niveles)
Adolescentes Adultos Niñas&Niños
44 601 69
# Señalamos que deseamos que los adolescentes tengan un valor 1 en la primera variable dummy dummyAdolescentes <-as.numeric(titanic$Edad_Niveles =="Adolescentes")# Señalamos que deseamos que los adultos tengan un valor 1 en la segunda variable dummy dummyAdultos <-as.numeric(titanic$Edad_Niveles =="Adultos")# Señalamos que deseamos que los niños y niñas tengan un valor 1 en la tercera variable dummy dummyNiños_niñas <-as.numeric(titanic$Edad_Niveles =="Niñas&Niños")# Revisamos la recodificaciónd <-data.frame(original = titanic$Edad_Niveles, dummyAdolescentes, dummyAdultos, dummyNiños_niñas)d
original dummyAdolescentes dummyAdultos dummyNiños_niñas
1 Adultos 0 1 0
2 Adultos 0 1 0
3 Adultos 0 1 0
4 Adultos 0 1 0
5 Adultos 0 1 0
6 <NA> NA NA NA
7 Adultos 0 1 0
8 Niñas&Niños 0 0 1
9 Adultos 0 1 0
10 Adolescentes 1 0 0
11 Niñas&Niños 0 0 1
12 Adultos 0 1 0
13 Adultos 0 1 0
14 Adultos 0 1 0
15 Adolescentes 1 0 0
16 Adultos 0 1 0
17 Niñas&Niños 0 0 1
18 <NA> NA NA NA
19 Adultos 0 1 0
20 <NA> NA NA NA
21 Adultos 0 1 0
22 Adultos 0 1 0
23 Adolescentes 1 0 0
24 Adultos 0 1 0
25 Niñas&Niños 0 0 1
26 Adultos 0 1 0
27 <NA> NA NA NA
28 Adultos 0 1 0
29 <NA> NA NA NA
30 <NA> NA NA NA
31 Adultos 0 1 0
32 <NA> NA NA NA
33 <NA> NA NA NA
34 Adultos 0 1 0
35 Adultos 0 1 0
36 Adultos 0 1 0
37 <NA> NA NA NA
38 Adultos 0 1 0
39 Adultos 0 1 0
40 Adolescentes 1 0 0
41 Adultos 0 1 0
42 Adultos 0 1 0
43 <NA> NA NA NA
44 Niñas&Niños 0 0 1
45 Adultos 0 1 0
46 <NA> NA NA NA
47 <NA> NA NA NA
48 <NA> NA NA NA
49 <NA> NA NA NA
50 Adultos 0 1 0
51 Niñas&Niños 0 0 1
52 Adultos 0 1 0
53 Adultos 0 1 0
54 Adultos 0 1 0
55 Adultos 0 1 0
56 <NA> NA NA NA
57 Adultos 0 1 0
58 Adultos 0 1 0
59 Niñas&Niños 0 0 1
60 Niñas&Niños 0 0 1
61 Adultos 0 1 0
62 Adultos 0 1 0
63 Adultos 0 1 0
64 Niñas&Niños 0 0 1
65 <NA> NA NA NA
66 <NA> NA NA NA
67 Adultos 0 1 0
68 Adultos 0 1 0
69 Adolescentes 1 0 0
70 Adultos 0 1 0
71 Adultos 0 1 0
72 Adolescentes 1 0 0
73 Adultos 0 1 0
74 Adultos 0 1 0
75 Adultos 0 1 0
76 Adultos 0 1 0
77 <NA> NA NA NA
78 <NA> NA NA NA
79 Niñas&Niños 0 0 1
80 Adultos 0 1 0
81 Adultos 0 1 0
82 Adultos 0 1 0
83 <NA> NA NA NA
84 Adultos 0 1 0
85 Adolescentes 1 0 0
86 Adultos 0 1 0
87 Adolescentes 1 0 0
88 <NA> NA NA NA
89 Adultos 0 1 0
90 Adultos 0 1 0
91 Adultos 0 1 0
92 Adultos 0 1 0
93 Adultos 0 1 0
94 Adultos 0 1 0
95 Adultos 0 1 0
96 <NA> NA NA NA
97 Adultos 0 1 0
98 Adultos 0 1 0
99 Adultos 0 1 0
100 Adultos 0 1 0
101 Adultos 0 1 0
102 <NA> NA NA NA
103 Adultos 0 1 0
104 Adultos 0 1 0
105 Adultos 0 1 0
106 Adultos 0 1 0
107 Adultos 0 1 0
108 <NA> NA NA NA
109 Adultos 0 1 0
110 <NA> NA NA NA
111 Adultos 0 1 0
112 Adolescentes 1 0 0
113 Adultos 0 1 0
114 Adultos 0 1 0
115 Adolescentes 1 0 0
116 Adultos 0 1 0
117 Adultos 0 1 0
118 Adultos 0 1 0
119 Adultos 0 1 0
120 Niñas&Niños 0 0 1
121 Adultos 0 1 0
122 <NA> NA NA NA
123 Adultos 0 1 0
124 Adultos 0 1 0
125 Adultos 0 1 0
126 Niñas&Niños 0 0 1
127 <NA> NA NA NA
128 Adultos 0 1 0
129 <NA> NA NA NA
130 Adultos 0 1 0
131 Adultos 0 1 0
132 Adultos 0 1 0
133 Adultos 0 1 0
134 Adultos 0 1 0
135 Adultos 0 1 0
136 Adultos 0 1 0
137 Adultos 0 1 0
138 Adultos 0 1 0
139 Adolescentes 1 0 0
140 Adultos 0 1 0
141 <NA> NA NA NA
142 Adultos 0 1 0
143 Adultos 0 1 0
144 Adultos 0 1 0
145 Adultos 0 1 0
146 Adultos 0 1 0
147 Adultos 0 1 0
148 Niñas&Niños 0 0 1
149 Adultos 0 1 0
150 Adultos 0 1 0
151 Adultos 0 1 0
152 Adultos 0 1 0
153 Adultos 0 1 0
154 Adultos 0 1 0
155 <NA> NA NA NA
156 Adultos 0 1 0
157 Adolescentes 1 0 0
158 Adultos 0 1 0
159 <NA> NA NA NA
160 <NA> NA NA NA
161 Adultos 0 1 0
162 Adultos 0 1 0
163 Adultos 0 1 0
164 Adolescentes 1 0 0
165 Niñas&Niños 0 0 1
166 Niñas&Niños 0 0 1
167 <NA> NA NA NA
168 Adultos 0 1 0
169 <NA> NA NA NA
170 Adultos 0 1 0
171 Adultos 0 1 0
172 Niñas&Niños 0 0 1
173 Niñas&Niños 0 0 1
174 Adultos 0 1 0
175 Adultos 0 1 0
176 Adultos 0 1 0
177 <NA> NA NA NA
178 Adultos 0 1 0
179 Adultos 0 1 0
180 Adultos 0 1 0
181 <NA> NA NA NA
182 <NA> NA NA NA
183 Niñas&Niños 0 0 1
184 Niñas&Niños 0 0 1
185 Niñas&Niños 0 0 1
186 <NA> NA NA NA
187 <NA> NA NA NA
188 Adultos 0 1 0
189 Adultos 0 1 0
190 Adultos 0 1 0
191 Adultos 0 1 0
192 Adultos 0 1 0
193 Adultos 0 1 0
194 Niñas&Niños 0 0 1
195 Adultos 0 1 0
196 Adultos 0 1 0
197 <NA> NA NA NA
198 Adultos 0 1 0
199 <NA> NA NA NA
200 Adultos 0 1 0
201 Adultos 0 1 0
202 <NA> NA NA NA
203 Adultos 0 1 0
204 Adultos 0 1 0
205 Adultos 0 1 0
206 Niñas&Niños 0 0 1
207 Adultos 0 1 0
208 Adultos 0 1 0
209 Adolescentes 1 0 0
210 Adultos 0 1 0
211 Adultos 0 1 0
212 Adultos 0 1 0
213 Adultos 0 1 0
214 Adultos 0 1 0
215 <NA> NA NA NA
216 Adultos 0 1 0
217 Adultos 0 1 0
218 Adultos 0 1 0
219 Adultos 0 1 0
220 Adultos 0 1 0
221 Adolescentes 1 0 0
222 Adultos 0 1 0
223 Adultos 0 1 0
224 <NA> NA NA NA
225 Adultos 0 1 0
226 Adultos 0 1 0
227 Adultos 0 1 0
228 Adultos 0 1 0
229 Adultos 0 1 0
230 <NA> NA NA NA
231 Adultos 0 1 0
232 Adultos 0 1 0
233 Adultos 0 1 0
234 Niñas&Niños 0 0 1
235 Adultos 0 1 0
236 <NA> NA NA NA
237 Adultos 0 1 0
238 Niñas&Niños 0 0 1
239 Adultos 0 1 0
240 Adultos 0 1 0
241 <NA> NA NA NA
242 <NA> NA NA NA
243 Adultos 0 1 0
244 Adultos 0 1 0
245 Adultos 0 1 0
246 Adultos 0 1 0
247 Adultos 0 1 0
248 Adultos 0 1 0
249 Adultos 0 1 0
250 Adultos 0 1 0
251 <NA> NA NA NA
252 Adultos 0 1 0
253 Adultos 0 1 0
254 Adultos 0 1 0
255 Adultos 0 1 0
256 Adultos 0 1 0
257 <NA> NA NA NA
258 Adultos 0 1 0
259 Adultos 0 1 0
260 Adultos 0 1 0
261 <NA> NA NA NA
262 Niñas&Niños 0 0 1
263 Adultos 0 1 0
264 Adultos 0 1 0
265 <NA> NA NA NA
266 Adultos 0 1 0
267 Adolescentes 1 0 0
268 Adultos 0 1 0
269 Adultos 0 1 0
270 Adultos 0 1 0
271 <NA> NA NA NA
272 Adultos 0 1 0
273 Adultos 0 1 0
274 Adultos 0 1 0
275 <NA> NA NA NA
276 Adultos 0 1 0
277 Adultos 0 1 0
278 <NA> NA NA NA
279 Niñas&Niños 0 0 1
280 Adultos 0 1 0
281 Adultos 0 1 0
282 Adultos 0 1 0
283 Adolescentes 1 0 0
284 Adultos 0 1 0
285 <NA> NA NA NA
286 Adultos 0 1 0
287 Adultos 0 1 0
288 Adultos 0 1 0
289 Adultos 0 1 0
290 Adultos 0 1 0
291 Adultos 0 1 0
292 Adultos 0 1 0
293 Adultos 0 1 0
294 Adultos 0 1 0
295 Adultos 0 1 0
296 <NA> NA NA NA
297 Adultos 0 1 0
298 Niñas&Niños 0 0 1
299 <NA> NA NA NA
300 Adultos 0 1 0
301 <NA> NA NA NA
302 <NA> NA NA NA
303 Adultos 0 1 0
304 <NA> NA NA NA
305 <NA> NA NA NA
306 Niñas&Niños 0 0 1
307 <NA> NA NA NA
308 Adolescentes 1 0 0
309 Adultos 0 1 0
310 Adultos 0 1 0
311 Adultos 0 1 0
312 Adultos 0 1 0
313 Adultos 0 1 0
314 Adultos 0 1 0
315 Adultos 0 1 0
316 Adultos 0 1 0
317 Adultos 0 1 0
318 Adultos 0 1 0
319 Adultos 0 1 0
320 Adultos 0 1 0
321 Adultos 0 1 0
322 Adultos 0 1 0
323 Adultos 0 1 0
324 Adultos 0 1 0
325 <NA> NA NA NA
326 Adultos 0 1 0
327 Adultos 0 1 0
328 Adultos 0 1 0
329 Adultos 0 1 0
330 Adolescentes 1 0 0
331 <NA> NA NA NA
332 Adultos 0 1 0
333 Adultos 0 1 0
334 Adolescentes 1 0 0
335 <NA> NA NA NA
336 <NA> NA NA NA
337 Adultos 0 1 0
338 Adultos 0 1 0
339 Adultos 0 1 0
340 Adultos 0 1 0
341 Niñas&Niños 0 0 1
342 Adultos 0 1 0
343 Adultos 0 1 0
344 Adultos 0 1 0
345 Adultos 0 1 0
346 Adultos 0 1 0
347 Adultos 0 1 0
348 <NA> NA NA NA
349 Niñas&Niños 0 0 1
350 Adultos 0 1 0
351 Adultos 0 1 0
352 <NA> NA NA NA
353 Adolescentes 1 0 0
354 Adultos 0 1 0
355 <NA> NA NA NA
356 Adultos 0 1 0
357 Adultos 0 1 0
358 Adultos 0 1 0
359 <NA> NA NA NA
360 <NA> NA NA NA
361 Adultos 0 1 0
362 Adultos 0 1 0
363 Adultos 0 1 0
364 Adultos 0 1 0
365 <NA> NA NA NA
366 Adultos 0 1 0
367 Adultos 0 1 0
368 <NA> NA NA NA
369 <NA> NA NA NA
370 Adultos 0 1 0
371 Adultos 0 1 0
372 Adultos 0 1 0
373 Adultos 0 1 0
374 Adultos 0 1 0
375 Niñas&Niños 0 0 1
376 <NA> NA NA NA
377 Adultos 0 1 0
378 Adultos 0 1 0
379 Adultos 0 1 0
380 Adultos 0 1 0
381 Adultos 0 1 0
382 Niñas&Niños 0 0 1
383 Adultos 0 1 0
384 Adultos 0 1 0
385 <NA> NA NA NA
386 Adultos 0 1 0
387 Niñas&Niños 0 0 1
388 Adultos 0 1 0
389 <NA> NA NA NA
390 Adolescentes 1 0 0
391 Adultos 0 1 0
392 Adultos 0 1 0
393 Adultos 0 1 0
394 Adultos 0 1 0
395 Adultos 0 1 0
396 Adultos 0 1 0
397 Adultos 0 1 0
398 Adultos 0 1 0
399 Adultos 0 1 0
400 Adultos 0 1 0
401 Adultos 0 1 0
402 Adultos 0 1 0
403 Adultos 0 1 0
404 Adultos 0 1 0
405 Adultos 0 1 0
406 Adultos 0 1 0
407 Adultos 0 1 0
408 Niñas&Niños 0 0 1
409 Adultos 0 1 0
410 <NA> NA NA NA
411 <NA> NA NA NA
412 <NA> NA NA NA
413 Adultos 0 1 0
414 <NA> NA NA NA
415 Adultos 0 1 0
416 <NA> NA NA NA
417 Adultos 0 1 0
418 Adultos 0 1 0
419 Adultos 0 1 0
420 Niñas&Niños 0 0 1
421 <NA> NA NA NA
422 Adultos 0 1 0
423 Adultos 0 1 0
424 Adultos 0 1 0
425 Adultos 0 1 0
426 <NA> NA NA NA
427 Adultos 0 1 0
428 Adultos 0 1 0
429 <NA> NA NA NA
430 Adultos 0 1 0
431 Adultos 0 1 0
432 <NA> NA NA NA
433 Adultos 0 1 0
434 Adolescentes 1 0 0
435 Adultos 0 1 0
436 Adolescentes 1 0 0
437 Adultos 0 1 0
438 Adultos 0 1 0
439 Adultos 0 1 0
440 Adultos 0 1 0
441 Adultos 0 1 0
442 Adultos 0 1 0
443 Adultos 0 1 0
444 Adultos 0 1 0
445 <NA> NA NA NA
446 Niñas&Niños 0 0 1
447 Adolescentes 1 0 0
448 Adultos 0 1 0
449 Niñas&Niños 0 0 1
450 Adultos 0 1 0
451 Adultos 0 1 0
452 <NA> NA NA NA
453 Adultos 0 1 0
454 Adultos 0 1 0
455 <NA> NA NA NA
456 Adultos 0 1 0
457 Adultos 0 1 0
458 <NA> NA NA NA
459 Adultos 0 1 0
460 <NA> NA NA NA
461 Adultos 0 1 0
462 Adultos 0 1 0
463 Adultos 0 1 0
464 Adultos 0 1 0
465 <NA> NA NA NA
466 Adultos 0 1 0
467 <NA> NA NA NA
468 Adultos 0 1 0
469 <NA> NA NA NA
470 Niñas&Niños 0 0 1
471 <NA> NA NA NA
472 Adultos 0 1 0
473 Adultos 0 1 0
474 Adultos 0 1 0
475 Adultos 0 1 0
476 <NA> NA NA NA
477 Adultos 0 1 0
478 Adultos 0 1 0
479 Adultos 0 1 0
480 Niñas&Niños 0 0 1
481 Niñas&Niños 0 0 1
482 <NA> NA NA NA
483 Adultos 0 1 0
484 Adultos 0 1 0
485 Adultos 0 1 0
486 <NA> NA NA NA
487 Adultos 0 1 0
488 Adultos 0 1 0
489 Adultos 0 1 0
490 Niñas&Niños 0 0 1
491 <NA> NA NA NA
492 Adultos 0 1 0
493 Adultos 0 1 0
494 Adultos 0 1 0
495 Adultos 0 1 0
496 <NA> NA NA NA
497 Adultos 0 1 0
498 <NA> NA NA NA
499 Adultos 0 1 0
500 Adultos 0 1 0
501 Adolescentes 1 0 0
502 Adultos 0 1 0
503 <NA> NA NA NA
504 Adultos 0 1 0
505 Adolescentes 1 0 0
506 Adultos 0 1 0
507 Adultos 0 1 0
508 <NA> NA NA NA
509 Adultos 0 1 0
510 Adultos 0 1 0
511 Adultos 0 1 0
512 <NA> NA NA NA
513 Adultos 0 1 0
514 Adultos 0 1 0
515 Adultos 0 1 0
516 Adultos 0 1 0
517 Adultos 0 1 0
518 <NA> NA NA NA
519 Adultos 0 1 0
520 Adultos 0 1 0
521 Adultos 0 1 0
522 Adultos 0 1 0
523 <NA> NA NA NA
524 Adultos 0 1 0
525 <NA> NA NA NA
526 Adultos 0 1 0
527 Adultos 0 1 0
528 <NA> NA NA NA
529 Adultos 0 1 0
530 Adultos 0 1 0
531 Niñas&Niños 0 0 1
532 <NA> NA NA NA
533 Adolescentes 1 0 0
534 <NA> NA NA NA
535 Adultos 0 1 0
536 Niñas&Niños 0 0 1
537 Adultos 0 1 0
538 Adultos 0 1 0
539 <NA> NA NA NA
540 Adultos 0 1 0
541 Adultos 0 1 0
542 Niñas&Niños 0 0 1
543 Niñas&Niños 0 0 1
544 Adultos 0 1 0
545 Adultos 0 1 0
546 Adultos 0 1 0
547 Adultos 0 1 0
548 <NA> NA NA NA
549 Adultos 0 1 0
550 Niñas&Niños 0 0 1
551 Adolescentes 1 0 0
552 Adultos 0 1 0
553 <NA> NA NA NA
554 Adultos 0 1 0
555 Adultos 0 1 0
556 Adultos 0 1 0
557 Adultos 0 1 0
558 <NA> NA NA NA
559 Adultos 0 1 0
560 Adultos 0 1 0
561 <NA> NA NA NA
562 Adultos 0 1 0
563 Adultos 0 1 0
564 <NA> NA NA NA
565 <NA> NA NA NA
566 Adultos 0 1 0
567 Adultos 0 1 0
568 Adultos 0 1 0
569 <NA> NA NA NA
570 Adultos 0 1 0
571 Adultos 0 1 0
572 Adultos 0 1 0
573 Adultos 0 1 0
574 <NA> NA NA NA
575 Adolescentes 1 0 0
576 Adultos 0 1 0
577 Adultos 0 1 0
578 Adultos 0 1 0
579 <NA> NA NA NA
580 Adultos 0 1 0
581 Adultos 0 1 0
582 Adultos 0 1 0
583 Adultos 0 1 0
584 Adultos 0 1 0
585 <NA> NA NA NA
586 Adultos 0 1 0
587 Adultos 0 1 0
588 Adultos 0 1 0
589 Adultos 0 1 0
590 <NA> NA NA NA
591 Adultos 0 1 0
592 Adultos 0 1 0
593 Adultos 0 1 0
594 <NA> NA NA NA
595 Adultos 0 1 0
596 Adultos 0 1 0
597 <NA> NA NA NA
598 Adultos 0 1 0
599 <NA> NA NA NA
600 Adultos 0 1 0
601 Adultos 0 1 0
602 <NA> NA NA NA
603 <NA> NA NA NA
604 Adultos 0 1 0
605 Adultos 0 1 0
606 Adultos 0 1 0
607 Adultos 0 1 0
608 Adultos 0 1 0
609 Adultos 0 1 0
610 Adultos 0 1 0
611 Adultos 0 1 0
612 <NA> NA NA NA
613 <NA> NA NA NA
614 <NA> NA NA NA
615 Adultos 0 1 0
616 Adultos 0 1 0
617 Adultos 0 1 0
618 Adultos 0 1 0
619 Niñas&Niños 0 0 1
620 Adultos 0 1 0
621 Adultos 0 1 0
622 Adultos 0 1 0
623 Adultos 0 1 0
624 Adultos 0 1 0
625 Adultos 0 1 0
626 Adultos 0 1 0
627 Adultos 0 1 0
628 Adultos 0 1 0
629 Adultos 0 1 0
630 <NA> NA NA NA
631 Adultos 0 1 0
632 Adultos 0 1 0
633 Adultos 0 1 0
634 <NA> NA NA NA
635 Niñas&Niños 0 0 1
636 Adultos 0 1 0
637 Adultos 0 1 0
638 Adultos 0 1 0
639 Adultos 0 1 0
640 <NA> NA NA NA
641 Adultos 0 1 0
642 Adultos 0 1 0
643 Niñas&Niños 0 0 1
644 <NA> NA NA NA
645 Niñas&Niños 0 0 1
646 Adultos 0 1 0
647 Adultos 0 1 0
648 Adultos 0 1 0
649 <NA> NA NA NA
650 Adultos 0 1 0
651 <NA> NA NA NA
652 Adultos 0 1 0
653 Adultos 0 1 0
654 <NA> NA NA NA
655 Adultos 0 1 0
656 Adultos 0 1 0
657 <NA> NA NA NA
658 Adultos 0 1 0
659 Adultos 0 1 0
660 Adultos 0 1 0
661 Adultos 0 1 0
662 Adultos 0 1 0
663 Adultos 0 1 0
664 Adultos 0 1 0
665 Adultos 0 1 0
666 Adultos 0 1 0
667 Adultos 0 1 0
668 <NA> NA NA NA
669 Adultos 0 1 0
670 <NA> NA NA NA
671 Adultos 0 1 0
672 Adultos 0 1 0
673 Adultos 0 1 0
674 Adultos 0 1 0
675 <NA> NA NA NA
676 Adultos 0 1 0
677 Adultos 0 1 0
678 Adultos 0 1 0
679 Adultos 0 1 0
680 Adultos 0 1 0
681 <NA> NA NA NA
682 Adultos 0 1 0
683 Adultos 0 1 0
684 Adolescentes 1 0 0
685 Adultos 0 1 0
686 Adultos 0 1 0
687 Adolescentes 1 0 0
688 Adultos 0 1 0
689 Adultos 0 1 0
690 Adolescentes 1 0 0
691 Adultos 0 1 0
692 Niñas&Niños 0 0 1
693 <NA> NA NA NA
694 Adultos 0 1 0
695 Adultos 0 1 0
696 Adultos 0 1 0
697 Adultos 0 1 0
698 <NA> NA NA NA
699 Adultos 0 1 0
700 Adultos 0 1 0
701 Adultos 0 1 0
702 Adultos 0 1 0
703 Adultos 0 1 0
704 Adultos 0 1 0
705 Adultos 0 1 0
706 Adultos 0 1 0
707 Adultos 0 1 0
708 Adultos 0 1 0
709 Adultos 0 1 0
710 <NA> NA NA NA
711 Adultos 0 1 0
712 <NA> NA NA NA
713 Adultos 0 1 0
714 Adultos 0 1 0
715 Adultos 0 1 0
716 Adultos 0 1 0
717 Adultos 0 1 0
718 Adultos 0 1 0
719 <NA> NA NA NA
720 Adultos 0 1 0
721 Niñas&Niños 0 0 1
722 Adolescentes 1 0 0
723 Adultos 0 1 0
724 Adultos 0 1 0
725 Adultos 0 1 0
726 Adultos 0 1 0
727 Adultos 0 1 0
728 <NA> NA NA NA
729 Adultos 0 1 0
730 Adultos 0 1 0
731 Adultos 0 1 0
732 Niñas&Niños 0 0 1
733 <NA> NA NA NA
734 Adultos 0 1 0
735 Adultos 0 1 0
736 Adultos 0 1 0
737 Adultos 0 1 0
738 Adultos 0 1 0
739 <NA> NA NA NA
740 <NA> NA NA NA
741 <NA> NA NA NA
742 Adultos 0 1 0
743 Adultos 0 1 0
744 Adultos 0 1 0
745 Adultos 0 1 0
746 Adultos 0 1 0
747 Adolescentes 1 0 0
748 Adultos 0 1 0
749 Adultos 0 1 0
750 Adultos 0 1 0
751 Niñas&Niños 0 0 1
752 Niñas&Niños 0 0 1
753 Adultos 0 1 0
754 Adultos 0 1 0
755 Adultos 0 1 0
756 Niñas&Niños 0 0 1
757 Adultos 0 1 0
758 Adultos 0 1 0
759 Adultos 0 1 0
760 Adultos 0 1 0
761 <NA> NA NA NA
762 Adultos 0 1 0
763 Adultos 0 1 0
764 Adultos 0 1 0
765 Adolescentes 1 0 0
766 Adultos 0 1 0
767 <NA> NA NA NA
768 Adultos 0 1 0
769 <NA> NA NA NA
770 Adultos 0 1 0
771 Adultos 0 1 0
772 Adultos 0 1 0
773 Adultos 0 1 0
774 <NA> NA NA NA
775 Adultos 0 1 0
776 Adultos 0 1 0
777 <NA> NA NA NA
778 Niñas&Niños 0 0 1
779 <NA> NA NA NA
780 Adultos 0 1 0
781 Adolescentes 1 0 0
782 Adolescentes 1 0 0
783 Adultos 0 1 0
784 <NA> NA NA NA
785 Adultos 0 1 0
786 Adultos 0 1 0
787 Adultos 0 1 0
788 Niñas&Niños 0 0 1
789 Niñas&Niños 0 0 1
790 Adultos 0 1 0
791 <NA> NA NA NA
792 Adolescentes 1 0 0
793 <NA> NA NA NA
794 <NA> NA NA NA
795 Adultos 0 1 0
796 Adultos 0 1 0
797 Adultos 0 1 0
798 Adultos 0 1 0
799 Adultos 0 1 0
800 Adultos 0 1 0
801 Adultos 0 1 0
802 Adultos 0 1 0
803 Niñas&Niños 0 0 1
804 Niñas&Niños 0 0 1
805 Adultos 0 1 0
806 Adultos 0 1 0
807 Adultos 0 1 0
808 Adultos 0 1 0
809 Adultos 0 1 0
810 Adultos 0 1 0
811 Adultos 0 1 0
812 Adultos 0 1 0
813 Adultos 0 1 0
814 Niñas&Niños 0 0 1
815 Adultos 0 1 0
816 <NA> NA NA NA
817 Adultos 0 1 0
818 Adultos 0 1 0
819 Adultos 0 1 0
820 Niñas&Niños 0 0 1
821 Adultos 0 1 0
822 Adultos 0 1 0
823 Adultos 0 1 0
824 Adultos 0 1 0
825 Niñas&Niños 0 0 1
826 <NA> NA NA NA
827 <NA> NA NA NA
828 Niñas&Niños 0 0 1
829 <NA> NA NA NA
830 Adultos 0 1 0
831 Adolescentes 1 0 0
832 Niñas&Niños 0 0 1
833 <NA> NA NA NA
834 Adultos 0 1 0
835 Adultos 0 1 0
836 Adultos 0 1 0
837 Adultos 0 1 0
838 <NA> NA NA NA
839 Adultos 0 1 0
840 <NA> NA NA NA
841 Adultos 0 1 0
842 Adolescentes 1 0 0
843 Adultos 0 1 0
844 Adultos 0 1 0
845 Adolescentes 1 0 0
846 Adultos 0 1 0
847 <NA> NA NA NA
848 Adultos 0 1 0
849 Adultos 0 1 0
850 <NA> NA NA NA
851 Niñas&Niños 0 0 1
852 Adultos 0 1 0
853 Niñas&Niños 0 0 1
854 Adolescentes 1 0 0
855 Adultos 0 1 0
856 Adultos 0 1 0
857 Adultos 0 1 0
858 Adultos 0 1 0
859 Adultos 0 1 0
860 <NA> NA NA NA
861 Adultos 0 1 0
862 Adultos 0 1 0
863 Adultos 0 1 0
864 <NA> NA NA NA
865 Adultos 0 1 0
866 Adultos 0 1 0
867 Adultos 0 1 0
868 Adultos 0 1 0
869 <NA> NA NA NA
870 Niñas&Niños 0 0 1
871 Adultos 0 1 0
872 Adultos 0 1 0
873 Adultos 0 1 0
874 Adultos 0 1 0
875 Adultos 0 1 0
876 Adolescentes 1 0 0
877 Adultos 0 1 0
878 Adultos 0 1 0
879 <NA> NA NA NA
880 Adultos 0 1 0
881 Adultos 0 1 0
882 Adultos 0 1 0
883 Adultos 0 1 0
884 Adultos 0 1 0
885 Adultos 0 1 0
886 Adultos 0 1 0
887 Adultos 0 1 0
888 Adultos 0 1 0
889 <NA> NA NA NA
890 Adultos 0 1 0
891 Adultos 0 1 0
En el data frame con nombre d podemos ver que los adultos son indicados con un 1 en “dummyAdultos” y con un 0 en “dummyAdolescentes” y “dummyNiños_niñas”. Del mismo modo, los adolescentes son indicados con un 1 en “dummyAdolescentes” y con un 0 en “dummyAdultos” y “dummyNiños_niñas”. Finalmente, los niños y niñas son indicados con un 1 en “dummyNiños_niñas” y con un 0 en “dummyAdolescentes” y “dummyAdultos”.
Variables construidas a partir de múltiples preguntas
Para construir variables que contengan los resultados de múltiples preguntas, utilizaremos la base de datos de los “Big five”.
# Leemos y guardamos la base de datos en el objeto big5big5 <-read.csv("https://david-ti.github.io/introstats/data/big_five.csv")
En este caso, emplearemos las 10 preguntas asociadas al factor de neuroticismo, las cuales están nombradas en esta base de datos con la letra n (n1, n2, …, n10) y corresponden a las siguientes preguntas:
N1 Me estreso con facilidad.
N2 Estoy relajado la mayor parte del tiempo.
N3 Me preocupo por las cosas.
N4 Rara vez me siento triste.
N5 Me altero fácilmente.
N6 Me altero con facilidad.
N7 Cambio mucho de humor.
N8 Tengo frecuentes cambios de humor.
N9 Me irrito fácilmente.
N10 A menudo me siento triste.
Podemos ver que las preguntas N2 y N4 estan invertidas en relación al resto de la escala, es decir, hay una tendencia opuesta en los cambios de estas variables. Por ende, antes de calcular un promedio de toda la escala debemos “invertir” estas respuestas.
De forma general las respuestas pueden ser invertidas siguiendo la fórmula:
(valor máximo de respuesta + valor mínimo de respuesta) - valor de la respuesta
De esta forma, en una escala de 1 a 5 como es el caso en este instrumento, una respuesta 2 a un item invertido correspondería a una respuesta de 4 en el sentido “correcto” (5 + 1 - 2).
# Podemos crear dos nuevas variables en la base de datosbig5$n2i <- (5+1) - big5$n2big5$n4i <- (5+1) - big5$n4# Y revisamos el cambiotable(big5$n2,big5$n2i)
Ahora que hemos creado las variables invertidas para estas preguntas, podemos calcular el promedio de las preguntas de neuroticismo.
# Podemos crear un nuevo objeto para guardar los promediosmedia_neuro <-rowMeans(big5[,c("n1","n2i","n3","n4i","n5","n6","n7","n8","n9","n10")] , na.rm =TRUE)hist(media_neuro)
# O podríamos agregar una nueva variable al data frame para guardarlobig5$media_neuro <-rowMeans(big5[,c("n1","n2i","n3","n4i","n5","n6","n7","n8","n9","n10")] , na.rm =TRUE)hist(big5$media_neuro)
La función rowMeans() calcula la media de las respuestas de cada fila, en este caso, el promedio de todas las respuestas de neuroticismo para cada individuo en la base de datos. En otras palabras, obtuvimos el promedio de neuroticismo de cada individuo a partir de sus respuestas a las 10 preguntas. Así, es posible asignarle un puntaje en la variable neuroticismo a cada persona.
Crear nuevos objetos con algunas variables
Supongamos que deseamos crear un nuevo objeto que contenga solo algunas variables de la base de datos de los “Big five”. Por ejemplo, deseamos almacenar la variable age y la variable gender. Para esto, debemos seleccionar las columnas correspondientes de la base de datos.
# Una primera forma que podemos utilizar es señalar las columnas por su númeroobjeto_nuevo1 <- big5[,1:2]# Vemos que se guardan las primeras dos variables en el nuevo objetohead(objeto_nuevo1)
# Otra alternativa es utilizar los nombres de las variables objeto_nuevo2 <- big5[,c("age","gender")]# Vemos que se guardan las primeras dos variables en el nuevo objetohead(objeto_nuevo2)
Ahora, también podemos querer agergar otra variables al nuevo objeto creado. Supongamos que deseamos agregar la variabla media_nuero creada anteriormente.
# Uitilizamos la función "cbind" la cual permite unir vectores, data frames o matrices por sus columnasobjeto_nuevo3 <-cbind(objeto_nuevo2, media_neuro)# Vemos que el nuevo objeto contiene las tres variableshead(objeto_nuevo3)
En ocasiones podemos querer solo trabajar con aquellos casos o personas que tengan información en todas las variables de nuestra base de datos. Cuando esto ocurre debemos eliminar aquellas filas que poseen valores perdidos o NAs.
# Uitilizamos la función "na.omit" la cual permite eliminar las filas que contiene algún NAobjeto_nuevo4 <-na.omit(objeto_nuevo3)# Vemos que nuestro nuevo objeto contiene 4 observaciones menos en comparación al objeto anteriorstr(objeto_nuevo3)
'data.frame': 500 obs. of 3 variables:
$ age : int 27 21 23 40 16 22 29 NA 23 16 ...
$ gender : int 2 2 2 2 1 2 1 1 1 2 ...
$ media_neuro: num 2 2.5 2.9 2.4 2 2.2 2.9 2.9 4.4 2.2 ...
str(objeto_nuevo4)
'data.frame': 496 obs. of 3 variables:
$ age : int 27 21 23 40 16 22 29 23 16 19 ...
$ gender : int 2 2 2 2 1 2 1 1 2 2 ...
$ media_neuro: num 2 2.5 2.9 2.4 2 2.2 2.9 4.4 2.2 2.9 ...
- attr(*, "na.action")= 'omit' Named int [1:4] 8 110 208 225
..- attr(*, "names")= chr [1:4] "8" "110" "208" "225"
# También podemos utilizar la función "complete.cases" para retener solo las filas completas sin valores NAobjeto_nuevo5 <- objeto_nuevo3[complete.cases(objeto_nuevo3), ]# Vemos que nuestro nuevo objeto contiene 4 observaciones menos en comparación al objeto anteriorstr(objeto_nuevo3)
'data.frame': 500 obs. of 3 variables:
$ age : int 27 21 23 40 16 22 29 NA 23 16 ...
$ gender : int 2 2 2 2 1 2 1 1 1 2 ...
$ media_neuro: num 2 2.5 2.9 2.4 2 2.2 2.9 2.9 4.4 2.2 ...
str(objeto_nuevo5)
'data.frame': 496 obs. of 3 variables:
$ age : int 27 21 23 40 16 22 29 23 16 19 ...
$ gender : int 2 2 2 2 1 2 1 1 2 2 ...
$ media_neuro: num 2 2.5 2.9 2.4 2 2.2 2.9 4.4 2.2 2.9 ...