Автоматично створювати підсумки за змінною фактора в R


11

У мене є такий кадр даних:

   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

Я хотів би отримати підсумки, розділені за рівнями імітаційної змінної. Наприклад, я хотів би, щоб середнє значення tempдля моделювання == 1 та моделювання == 2, те саме для стандартного відхилення.

На даний момент я використовую такий код, який досить жахливо:

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

Я впевнений, що повинен бути автоматичний спосіб зробити це в R, але я не можу його знайти. Я намагався використовувати summary(df ~ simulation), але це не дає нічого корисного.

Відповіді:


17

Ознайомтеся з функціями by()або tapply(). В основному,

tapply(y, g, mean)

дасть вам середнє значення yза рівнями g. Якщо ви хочете отримати data.frame з отриманих узагальнених заходів, використовуйте aggregate().

Більш детальне рішення доступне через summary.formula()функцію в пакеті Hmisc .


3

Пакет doByмає summaryByфункцію, яка має синтаксис на основі формули, як той, який ви спробували.

Крім того, я думаю, що це питання краще було б задати на стакштейн.


Дякую. Подивлюсь на пакет. Це stackexchange, чи не так?
robintw

1
Я думаю , що фабіанці означає Stackoverflow: stackoverflow.com , який для R програмування, як я роблю що - то в R питань. Це місце загалом стосується статистики. Однак вони можуть змішатися дуже багато.
Гевін Сімпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.