o seguinte post introdutório destina-se a novos utilizadores de R. trata da reestruturação de dados: o que é e como executá-lo utilizando funções R de base e o pacote {reformular}.Este é um artigo convidado do Dr. Robert I. Kabacoff, o fundador (um dos) dos primeiros sites de R tutoriais online: Quick-R. Kabacoff publicou recentemente o livro “R in Action”, fornecendo um passeio detalhado para a linguagem R com base em vários exemplos para ilustrar as características de R (manipulação de dados, métodos estatísticos, gráficos, e assim por diante…). O post anterior do Kabacoff introduziu dados.frame objects in R.
For readers of this blog, there is a 38% discount off the “R in Action” book (as well as all other eBooks, pBooks and MEAPs at Manning publishing house), simply by using the code rblogg38 when reaching checkout.Falemos agora da agregação e da reestruturação dos dados na R:
agregação e reestruturação
R fornece uma série de métodos poderosos para agregar e remodelar dados. Quando você agregar dados, você substitui grupos de observações por estatísticas resumidas baseadas nessas observações. Quando você remodela os dados, você altera a estrutura (linhas e Colunas) determinando como os dados são organizados. Este artigo descreve uma variedade de métodos para a realização dessas tarefas.Este conjunto de dados, extraído da Motor Trend magazine (1974), descreve as características de design e Desempenho (Número de cilindros, deslocamento, potência, mpg, E assim por diante) para 34 automóveis. Para saber mais sobre o conjunto de dados, consulte help(mtcars).
Transpose
the transpose (reversing rows and columns) is perhaps the simplest method of reshaping a dataset. Use a função t() para transpor uma matriz ou um quadro de dados. Neste último caso, os nomes das linhas tornam-se nomes variáveis (coluna). Um exemplo é apresentado na próxima listagem.
Listing 1 Transposing a dataset
Listing 1 uses a subset of the mtcars dataset in order to conserve space on the page. Você verá uma forma mais flexível de transpor dados quando olharmos para o pacote reformulado mais tarde neste artigo.
Aggregating data
It’s relatively easy to collapse data in R using one or more by variables and a defined function. O formato é
1 |
aggregate(x, by, FUN) |
onde x é o objeto de dados a ser recolhido, através de uma lista de variáveis que serão cruzadas para formar as novas observações, e a DIVERSÃO é a função escalar utilizado para calcular as estatísticas de resumo do que irá tornar-se os novos valores de observação.
como exemplo, vamos agregar os dados do mtcar por número de cilindros e engrenagens, retornando os meios em cada uma das variáveis numéricas (veja a próxima listagem).
Listagem 2 dados agregados
nestes resultados, grupo.1 representa o número de cilindros (4, 6, ou e Grupo.2 representa o número de engrenagens (3, 4, ou 5). Por exemplo, carros com 4 cilindros e 3 engrenagens têm uma média de 21,5 milhas por galão (mpg).
quando você está usando a função agregada (), as variáveis by devem estar em uma lista (mesmo que haja apenas uma). Você pode declarar um nome personalizado para os grupos dentro da lista, por exemplo, usando by=list(Grupo.cyl=cyl, Grupo.engrenagens=engrenagens).
a função especificada pode ser qualquer função incorporada ou fornecida pelo utilizador. Isso dá ao comando Agregado uma grande quantidade de poder. Mas quando se trata de poder, nada bate o pacote de remodelação.
o pacote reformulado
o pacote reformulado é uma abordagem tremendamente versátil tanto para a reestruturação como para a agregação de conjuntos de dados. Por causa desta versatilidade, pode ser um pouco desafiador para aprender.Vamos percorrer o processo lentamente e usar um pequeno conjunto de dados para que fique claro o que está acontecendo. Como a remodelação não está incluída na instalação padrão de R, você precisará instalá-la uma vez, usando install.pacotes (“remodelar”).
basicamente, você vai “derreter” dados de modo que cada linha é uma combinação ID-variável única. Depois, “moldará” os dados derretidos em qualquer forma que desejar. Durante o elenco, você pode agregar os dados com qualquer função que desejar. O conjunto de dados com o qual irá trabalhar é apresentado na tabela 1.
Tabela 1, O conjunto de dados original (mydata)
ID |
Horário |
X1 |
X2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
neste conjunto De dados, as medições são os valores nos dois últimos colunas (5, 6, 3, 5, 6, 1, 2, e 4). Cada medição é identificada de forma única por uma combinação de variáveis de ID (neste caso, ID, tempo, e se a medição está em X1 ou X2). Por exemplo, o valor medido 5 na primeira linha é identificado unicamente sabendo que é da observação (ID) 1, no momento 1, e da variável X1.
derreter
quando derreter um conjunto de dados, reestrutura-o num formato em que cada variável medida está na sua própria linha, juntamente com as variáveis ID necessárias para identificá-lo de forma única. Se você derreter os dados da tabela 1, utilizando o seguinte código
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
Você acaba com a estrutura mostrada na tabela 2.
Tabela 2 derretida conjunto de dados
ID |
Horário |
Variável |
Valor |
1 | 1 | X1 | 5 |
1 | 2 | X1 | 3 |
2 | 1 | X1 | 6 |
2 | 2 | X1 | 2 |
1 | 1 | X2 | 6 |
1 | 2 | X2 | 5 |
2 | 1 | X2 | 1 |
2 | 2 | X2 | 4 |
Note que você deve especificar as variáveis necessárias para identificar exclusivamente cada medição (ID e Tempo) e que a variável que indica a medição de nomes de variáveis (X1 ou X2) é criado automaticamente para você.
agora que você tem seus dados em uma forma derretida, você pode reformulá-lo em qualquer forma, usando a função cast ().
vazamento
a função cast() começa com dados derretidos e remodela-os usando uma fórmula que você fornece e uma função (opcional) usada para agregar os dados. O formato é
1 |
newdata <- cast(md, formula, FUN) |
Onde md é a derretido dados, fórmula descreve o resultado final desejado, e a DIVERSÃO é o (opcional) função agregada. A fórmula assume a forma
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
nesta fórmula, rowvar1 + rowvar2 + … definir o conjunto de cruzou as variáveis que definem as linhas, e colvar1 + colvar2 + … definir o conjunto de cruzou as variáveis que definem as colunas. Veja os exemplos na Figura 1. (clique para ampliar a imagem)
Figura 1 Reformatação de dados com a derreter() e cast() funções
Porque as fórmulas do lado direito (d, e, e f) não incluir uma função, os dados estão a ser reformuladas. Em contraste, os exemplos do lado esquerdo (A, b E c) especificam a média como uma função agregadora. Assim, os dados não são apenas reformulados, mas também agregados. Por exemplo, (a) dá os meios em X1 e X2 médios ao longo do tempo para cada observação. Exemplo b) dá as pontuações médias de X1 e X2 no tempo 1 e tempo 2, médias sobre observações. Na alínea c) tem a pontuação média para cada observação no tempo 1 e no tempo 2, calculada em média sobre X1 e X2.
como pode ver, a flexibilidade proporcionada pelas funções melt() e cast() é incrível. Há muitas vezes em que você terá que remodelar ou agregar seus dados antes da análise. Por exemplo, você normalmente precisa colocar seus dados no que é chamado de formato longo que se assemelha à tabela 2 ao analisar dados de medidas repetidas (dados onde várias medidas são gravadas para cada observação).
Summary
Chapter 5 of R in Action reviews many of the dúzias of mathematical, statistical, and probability functions that are useful for manipulating data. Neste artigo, temos explorado brevemente várias formas de agregar e reestruturar dados.
este artigo apareceu pela primeira vez como Capítulo 5.6 do livro “R in action”, e é publicado com permissão da Manning publishing house. Outros livros desta séria que você pode estar interessado em são (ver no início deste post para um código de desconto):
- Aprendizado de Máquina em Ação por Pedro Pinto
- Gnuplot em Ação (Compreensão de Dados com Gráficos) por Philip K. Janert