Produce automaticamente il riepilogo per variabile fattore in R


11

Ho un frame di dati come il seguente:

   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

Vorrei dividere i riepiloghi per i livelli della variabile di simulazione. Ad esempio, mi piacerebbe la media di tempper simulazione == 1 e simulazione == 2, e lo stesso per deviazione standard.

Al momento sto usando il seguente codice, che è piuttosto orribile:

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

Sono sicuro che ci deve essere un modo automatico per farlo in R, ma non riesco a trovarlo. Ho provato a usare summary(df ~ simulation), ma questo non produce nulla di utile.

Risposte:


17

Scopri le funzioni by()o tapply(). Fondamentalmente,

tapply(y, g, mean)

ti darà la media yper livelli di g. Se si desidera ottenere un file data.frame dalle misure aggregate risultanti, utilizzare aggregate().

Una soluzione più elaborata è disponibile tramite la summary.formula()funzione nel pacchetto Hmisc .


3

Il pacchetto doByha una summaryByfunzione che ha una sintassi basata su formula come quella che hai provato.

Inoltre, penso che questa domanda sarebbe stata posta meglio su stackexchange.


Grazie. Guarderò il pacchetto. Questo è stackexchange non è vero?
Robintw,

1
Penso che fabians intendesse StackOverflow: StackOverflow.com che è per la programmazione R, come posso fare qualcosa nelle domande R. Questo posto riguarda più in generale le statistiche. I due possono fondersi molto, tuttavia.
Ripristina Monica - G. Simpson il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.