A partir de uma trama de dados, existe uma maneira fácil para agregar ( sum
, mean
, max
et c) múltiplas variáveis simultaneamente?
Abaixo estão alguns dados de exemplo:
library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05))
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)
Gostaria de agregar simultaneamente as variáveis x1
e x2
do df2
quadro de dados por ano e mês. O código a seguir agrega a x1
variável, mas também é possível agregar a x2
variável simultaneamente ?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Todas as sugestões serão muito apreciadas.
recast
função (também dereshape2
) integra omelt
edcast
função de uma só vez para tarefas como esta:recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))
Sim, no seu
formula
, você podecbind
as variáveis numéricas a serem agregadas:Veja
?aggregate
oformula
argumento e os exemplos.fonte
.
o LHS.aggregate(. ~ year + month, df1, sum, na.rm = TRUE)
. Neste exemplo,sum
para "data" não faz sentido embora ...Usando o
data.table
pacote, que é rápido (útil para conjuntos de dados maiores)https://github.com/Rdatatable/data.table/wiki
Usando o pacote plyr
Usando resumize () do pacote Hmisc (os cabeçalhos das colunas são confusos no meu exemplo)
fonte
dt[, .(x1.sum = sum(x1), x2.sum = sum(x2), by = c(year, month)
:?Com o
dplyr
pacote, você pode usarsummarise_all
,summarise_at
ousummarise_if
funções para agregar várias variáveis simultaneamente. Para o conjunto de dados de exemplo, você pode fazer o seguinte:O resultado das duas últimas opções:
Nota:
summarise_each
foi descontinuado em favor desummarise_all
,summarise_at
esummarise_if
.Como mencionado no meu comentário acima , você também pode usar a
recast
função doreshape2
-package:o que lhe dará o mesmo resultado.
fonte
Curiosamente,
aggregate
odata.frame
método da base R não é mostrado aqui, acima da interface da fórmula é usada, portanto, para completar:Uso mais genérico do método data.frame do agregado:
Como estamos fornecendo uma
data.frame
comox
elist
(data.frame
também é alist
)by
, pois isso é muito útil se precisarmos usá-lo de maneira dinâmica, por exemplo, é muito simples usar outras colunas para serem agregadas e agregadas.Por exemplo, assim:
fonte
Com a
devel
versão dedplyr
(version -‘0.8.99.9000’
), também podemos usarsummarise
para aplicar a função em várias colunas comacross
fonte
Para uma abordagem mais flexível e rápida à agregação de dados, confira a
collap
função no pacote recolhido R disponível no CRAN:Nota : Você pode usar funções básicas como
mean, max
etc. comcollap
, masfmean, fmax
etc., são funções agrupadas baseadas em C ++ oferecidas no pacote collapse que são significativamente mais rápidas (ou seja, o desempenho em grandes agregações de dados é o mesmo que data.table, ao mesmo tempo em que oferece maior flexibilidade e essas funções de agrupamento rápido também podem ser usadas semcollap
).collap
Nota 2 : também oferece suporte à agregação de dados de vários tipos flexível, o que você pode fazer usando ocustom
argumento, mas também pode aplicar funções a colunas numéricas e não numéricas de uma maneira semi-automática:fonte
Chegou atrasado à festa, mas recentemente encontrou outra maneira de obter as estatísticas resumidas.
library(psych) describe(data)
Produzirá: média, mínimo, máximo, desvio padrão, n, erro padrão, curtose, assimetria, mediana e intervalo para cada variável.
fonte
describe
não faz nada pelo grupo ...describe.by(column, group = grouped_column)