Costumo lidar com dados confusos da pesquisa, que exigem muita limpeza antes que qualquer estatística possa ser feita. Eu costumava fazer isso "manualmente" no Excel, às vezes usando fórmulas do Excel e, às vezes, verificando as entradas uma a uma. Comecei a executar cada vez mais essas tarefas escrevendo scripts para executá-las em R, o que tem sido muito benéfico (os benefícios incluem ter um registro do que foi feito, menor chance de erros e ser capaz de reutilizar o código se o conjunto de dados for Atualizada).
Mas ainda existem alguns tipos de dados com problemas para lidar com eficiência. Por exemplo:
> 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
deve ser o número médio de horas por dia gasto em uma determinada atividade, mas o que temos é exatamente o que o sujeito escreveu. Suponha que eu tome algumas decisões sobre o que fazer com respostas ambíguas e que queira a variável organizada da hours.per.day2
seguinte maneira.
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
Supondo que o número de casos seja bastante grande (digamos 1000) e sabendo que os sujeitos estavam livres para escrever o que quisessem, qual é a melhor maneira de abordar isso?
new_var[by.hand] <- c(2, 1, ...)
comby.hand
estarTRUE
para os casos que são feitas à mão?