在 R 中按因子变量自动生成摘要

机器算法验证 r
2022-03-01 03:09:23

我有一个如下的数据框:

   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),但这并没有产生任何有用的东西。

2个回答

查看by()ortapply()函数。基本上,

tapply(y, g, mean)

会给你y按水平的平均值g如果要从生成的聚合度量中获取 data.frame,请使用aggregate().

通过Hmiscsummary.formula()中的函数可以获得更详细的解决方案。

packagedoBy有一个summaryBy函数,它有一个基于公式的语法,就像你尝试过的那样。

另外,我认为这个问题最好在stackexchange上提出。