Qual é a melhor maneira de remodelar / reestruturar dados?

12

Sou assistente de pesquisa de um laboratório (voluntário). Eu e um pequeno grupo fomos encarregados da análise de dados para um conjunto de dados extraídos de um grande estudo. Infelizmente, os dados foram coletados com um aplicativo on-line de algum tipo e não foram programados para gerar os dados da forma mais utilizável.

As figuras abaixo ilustram o problema básico. Foi-me dito que isso é chamado de "Remodelar" ou "Reestruturar".

Pergunta: Qual é o melhor processo para passar da Figura 1 para a Figura 2 com um grande conjunto de dados com mais de 10 mil entradas?

Este é um exemplo, o arquivo real tem mais de 10 mil entradas.  Eu tenho código de cores para ajudar na clareza

É nisso que tudo precisa ser convertido.

Wilkoe
fonte
1
Divida isso em duas perguntas separadas e forneça dados de amostra (você também pode omitir seu histórico, a menos que seja relevante). Aproximadamente, em (1) você deseja encontrar um mapeamento e depois mesclar para anexar números. (2) depende muito do tipo de manipulação que você deseja fazer; pacotes populares R para este tipo de coisa incluem data.table, dplyr, plyr, e reshape2- eu recomendo evitar Excel e tabelas dinâmicas, se possível.
Max Ghenis
Suponho que seus problemas de limpeza de dados sejam mais extensos do que podem ser abordados nos tipos de perguntas gerais que você faz. Você pode querer dar uma olhada no OpenRefine.org. Alguns vídeos e um download podem ajudar muito nessa parte da sua análise.
John
3
Esta questão parece estar fora de tópico porque se trata de limpeza e organização rudimentares de dados, não de estatísticas.
Nick Stauner
2
Eu diria que não está fora de tópico porque a limpeza de seus dados, por mais "rudimentar" que seja o processo, é essencial para usá-los. É parte de um problema maior.
shadowtalker
2
@NickStauner, IIRC Votei em fechar como 'pouco claro / precisa de mais informações', não como fora de tópico. Parece-me que a limpeza de dados está dentro do escopo das estatísticas, e embora reconheço que pessoas boas podem discordar, acho que essas questões podem estar no tópico. Considere que temos uma tag de limpeza de dados e os seguintes tópicos do CV: 1 , 2 , 3 e 4 .
gung - Restabelece Monica

Respostas:

12

Como observei no meu comentário , não há detalhes suficientes na pergunta para que uma resposta real seja formulada. Como você precisa de ajuda para encontrar os termos certos e formular sua pergunta, posso falar brevemente em generalidades.

2

Em certo sentido, a limpeza de dados pode ser feita em qualquer software e no Excel ou no R. Haverá prós e contras nas duas opções:

  • Excel: Excel é quase certamente a opção mais comum para limpeza de dados (consulte R fortunas # 59 pdf ). Também é considerada uma má escolha pelos estatísticos. O principal motivo é que é difícil garantir que você captou tudo ou que tratou tudo de forma idêntica, e não há registro das alterações que você fez, portanto não é possível revisá-las posteriormente. A vantagem de usar o Excel é que será mais fácil ver o que você está fazendo e não precisa saber muito para fazer alterações. (Os estatísticos considerarão este último um golpe adicional .)
  • R: R exigirá uma curva de aprendizado acentuada. Se você não estiver muito familiarizado com R ou com programação, coisas que podem ser feitas com muita rapidez e facilidade no Excel serão frustrantes ao tentar em R. Por outro lado, se você precisar fazer isso novamente, esse aprendizado terá sido tempo bem gasto. Além disso, a capacidade de escrever e salvar seu código para limpar os dados em R aliviará os contras listados acima. A seguir, estão alguns links que ajudarão você a iniciar essas tarefas no R:

    Você pode obter muitas informações boas sobre o Stack Overflow :

    O Quick-R também é um recurso valioso:

    Colocando números no modo numérico:

    Outra fonte inestimável para aprender sobre o R é o site de ajuda de estatísticas da UCLA :

    Por fim, você sempre pode encontrar muitas informações com o bom e velho Google:


Atualização: esse é um problema comum em relação à estrutura do seu conjunto de dados quando você tem várias medidas por 'unidade de estudo' (no seu caso, uma pessoa). Se você tiver uma linha para cada pessoa, seus dados estarão em formato "amplo", mas você terá necessariamente várias colunas para sua variável de resposta, por exemplo. Por outro lado, você pode ter apenas uma coluna para sua variável de resposta (mas, como resultado, várias linhas por pessoa); nesse caso, seus dados são considerados na forma 'longa'. Mover-se entre esses dois formatos geralmente é chamado de "remodelar" seus dados, especialmente no mundo R.

  • A função R padrão para isso é ? Remodelar . Há um guia para usar reshape()no site de ajuda de estatísticas da UCLA.
  • Muitas pessoas pensam que reshapeé difícil trabalhar. Hadley Wickham contribuiu com um pacote chamado reshape2 , cujo objetivo é simplificar o processo. O site pessoal de Hadley para reshape2 está aqui , a visão geral do Quick-R está aqui e há um tutorial bonito aqui .
  • Existem muitas perguntas sobre o SO sobre como remodelar dados. A maioria deles vai de longo a longo prazo, porque normalmente é isso que os analistas de dados enfrentam. Sua pergunta é sobre ir de um longo para o outro, o que é muito menos comum, mas ainda existem muitos tópicos sobre isso. Você pode examiná-los com esta pesquisa .
  • Se você está disposto a tentar fazer isso com o Excel, há um tópico sobre como escrever uma macro VBA para Excel para replicar a funcionalidade de remodelagem aqui: derreter / remodelar no Excel usando VBA?
Repor a Monica
fonte
2
Esta pergunta e esta resposta são uma ótima ilustração de por que a alfabetização em programação é cada vez mais necessária para praticamente qualquer tipo de pesquisa. Vou escrever uma resposta mais completa para esta pergunta que também vou postar no meu blog, mas queria incluir esse comentário antes de me esquecer.
shadowtalker
2
Concordo até certo ponto, mas "necessário" e "qualquer tipo de pesquisa" estão indo um pouco longe. Muitas disciplinas nem sempre lidam com dados sujos e muitos pesquisadores importantes nunca precisaram tocar em uma linguagem de programação.
Behacad
Uau, obrigado a todos. Levarei um tempo para processar e integrar todas essas informações que são muito novas para mim. Um pouco de uma meta tangente, parece que eu estimulei com a minha pergunta ... Imagine-se cair em uma terra estrangeira sem conhecimento de sua língua / cultura, sou eu e as estatísticas. Agradeço o tempo que dedicaram a responder.
Wilkoe
Adicionei uma edição na esperança de esclarecer minha pergunta inicial, embora a questão pareça estar encerrada.
Wilkoe
A questão está encerrada, @ user48538, e esta versão está mais claramente fora do tópico do que a anterior, infelizmente. Se você possui 10 mil linhas, definitivamente não deseja tentar fazer isso no Excel. Você realmente precisa usar R ou software de programação semelhante. O nome da operação específica é remodelar seu conjunto de dados de 'longo' para 'amplo'; adicionarei mais alguns links para você. Além disso, se você é um voluntário de graduação, com pouca ou nenhuma formação em estatísticas ou programação, era altamente irresponsável de quem atribuir essa tarefa a você, IMHO. Não há como esta ser sua tarefa.
gung - Restabelece Monica
0

Tente seguir usando R:

> ddf
   sess_id user_id     quest  response
1        1       a       age        29
2        1       a satisfied  st_agree
3        1       a    gender      male
4        1       a     phone    iphone
5        2       a       age        29
6        2       a satisfied not_agree
7        2       a    gender    female
8        2       a     phone    iphone
9        3       b       age        29
10       3       b satisfied     agree
11       3       b    gender      male
12       3       b     phone   android
> 
> library(reshape2)
> dcast(ddf, sess_id+user_id ~ quest, value.var='response')
  sess_id user_id age gender   phone satisfied
1       1       a  29   male  iphone  st_agree
2       2       a  29 female  iphone not_agree
3       3       b  29   male android     agree
rnso
fonte
0

No scala, isso é chamado de operação "explodir" e pode ser feito em um dataFrame. Se seus dados forem um primeiro, você primeiro converte em dataFrame via toDFcomando e depois usa o .explodemétodo

Lucas Roberts
fonte