A menudo trato con datos de encuestas desordenados que requieren mucha limpieza antes de que se puedan realizar estadísticas. Solía hacer esto "manualmente" en Excel, a veces usando fórmulas de Excel, y otras comprobando las entradas una por una. Comencé a hacer cada vez más estas tareas escribiendo guiones para hacerlas en R, lo cual ha sido muy beneficioso (los beneficios incluyen tener un registro de lo que se hizo, menos posibilidades de errores y poder reutilizar el código si el conjunto de datos es actualizado).
Pero todavía hay algunos tipos de datos que tengo problemas para manejar de manera eficiente. Por ejemplo:
> d <- data.frame(subject = c(1,2,3,4,5,6,7,8,9,10,11),
+ hours.per.day = c("1", "2 hours", "2 hr", "2hr", "3 hrs", "1-2", "15 min", "30 mins", "a few hours", "1 hr 30 min", "1 hr/week"))
> d
subject hours.per.day
1 1 1
2 2 2 hours
3 3 2 hr
4 4 2hr
5 5 3 hrs
6 6 1-2
7 7 15 min
8 8 30 mins
9 9 a few hours
10 10 1 hr 30 min
11 11 1 hr/week
hours.per.day
está destinado a ser el número promedio de horas por día dedicadas a una determinada actividad, pero lo que tenemos es exactamente lo que escribió el sujeto. Supongamos que tomo algunas decisiones sobre qué hacer con respuestas ambiguas, y quiero la variable ordenada de la hours.per.day2
siguiente manera.
subject hours.per.day hours.per.day2
1 1 1 1.0000000
2 2 2 hours 2.0000000
3 3 2 hr 2.0000000
4 4 2hr 2.0000000
5 5 3 hrs 3.0000000
6 6 1-2 1.5000000
7 7 15 min 0.2500000
8 8 30 mins 0.5000000
9 9 a few hours 3.0000000
10 10 1 hr 30 min 1.5000000
11 11 1 hr/week 0.1428571
Suponiendo que el número de casos es bastante grande (digamos 1000) y sabiendo que los sujetos eran libres de escribir lo que quisieran, ¿cuál es la mejor manera de abordar esto?
new_var[by.hand] <- c(2, 1, ...)
conby.hand
estarTRUE
en los casos que se hacen a mano?