Produire automatiquement un résumé par variable de facteur dans R

11

J'ai une trame de données comme celle-ci:

   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

J'aimerais obtenir des résumés divisés par les niveaux de la variable de simulation. Par exemple, j'aimerais la moyenne de temppour simulation == 1 et simulation == 2, et la même chose pour l'écart type.

Pour le moment, j'utilise le code suivant, ce qui est assez horrible:

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))

Je suis sûr qu'il doit y avoir un moyen automatique de le faire dans R, mais je ne le trouve pas. J'ai essayé d'utiliser summary(df ~ simulation), mais cela ne produit rien d'utile.

robintw
la source

Réponses:

17

Découvrez les fonctions by()ou tapply(). Fondamentalement,

tapply(y, g, mean)

vous donnera la moyenne de ypar niveaux de g. Si vous souhaitez obtenir un data.frame à partir des mesures agrégées résultantes, utilisez aggregate().

Une solution plus élaborée est disponible via la summary.formula()fonction du package Hmisc .

chl
la source
3

package doBya une summaryByfonction qui a une syntaxe basée sur une formule comme celle que vous avez essayée.

Aussi, je pense que cette question aurait été mieux posée sur stackexchange.

fabians
la source
Merci. Je vais regarder le paquet. C'est stackexchange n'est-ce pas?
robintw
1
Je pense que fabians signifiait Stackoverflow: stackoverflow.com qui est pour la programmation R, comment faire quelque chose dans les questions R. Cet endroit concerne plus généralement les statistiques. Les deux peuvent cependant se mélanger beaucoup.
Rétablir Monica - G. Simpson