Produzir resumo automaticamente por variável de fator em R

11

Eu tenho um quadro de dados como o seguinte:

   case simulation temp plank oxygen
1     1          1    8     7     11
2     2          1   16    10     15
...
17   17          2   26    12     17
18   18          2   15     8     12
19   19          2   28    11     21
20   20          2   24     6     14

Eu gostaria de obter resumos divididos pelos níveis da variável de simulação. Por exemplo, eu gostaria da média de tempsimulação == 1 e simulação == 2 e a mesma para desvio padrão.

No momento, estou usando o seguinte código, o que é bastante horrível:

df <- read.csv("data.csv")
attach(df)

# Create subset variables
temp1 = subset(temp, simulation==1)
temp2 = subset(temp, simulation==2)

plank1 = subset(plank, simulation==1)
plank2 = subset(plank, simulation==2)

oxygen1 = subset(oxygen, simulation==1)
oxygen2 = subset(oxygen, simulation==2)

print(sd(temp1))
print(sd(temp2))
print(sd(plank1))
print(sd(plank2))

Tenho certeza de que deve haver uma maneira automática de fazer isso no R, mas não consigo encontrá-lo. Eu tentei usar summary(df ~ simulation), mas isso não produz nada de útil.

robintw
fonte

Respostas:

17

Confira as funções by()ou tapply(). Basicamente,

tapply(y, g, mean)

lhe dará a média de ypor níveis de g. Se você deseja obter um data.frame das medidas agregadas resultantes, use aggregate().

Uma solução mais elaborada está disponível através da summary.formula()função no pacote Hmisc .

chl
fonte
3

O pacote doBytem uma summaryByfunção que possui uma sintaxe baseada em fórmula como a que você tentou.

Além disso, acho que essa pergunta teria sido melhor formulada no stackexchange.

fabianos
fonte
Obrigado. Vou dar uma olhada no pacote. Isso é stackexchange, não é?
22810 robertw #
1
Acho que fabians significava Stackoverflow: stackoverflow.com, que é para programação em R, como faço para fazer algo nas perguntas em R. Este lugar é mais geral sobre estatísticas. Os dois podem se misturar muito, no entanto.
Reinstate Monica - G. Simpson