r - 为data.frame中的多个变量按组计算平均值和标准差

标签 r aggregate reshape reshape2

编辑 -- 本题原题为<< Long to wide data reshaping in R >>

我只是在学习 R 并试图找到方法来应用它来帮助我生活中的其他人。作为一个测试用例,我正在努力 reshape 一些数据,但我无法按照我在网上找到的示例进行操作。我开始看起来像这样:

ID  Obs 1   Obs 2   Obs 3
1   43      48      37
1   27      29      22
1   36      32      40
2   33      38      36
2   29      32      27
2   32      31      35
2   25      28      24
3   45      47      42
3   38      40      36

我想最终得到的结果是这样的:
ID  Obs 1 mean  Obs 1 std dev   Obs 2 mean  Obs 2 std dev
1   x           x               x           x
2   x           x               x           x
3   x           x               x           x

等等。我不确定的是我是否需要在我的长格式数据中提供其他信息,或者什么。我想数学部分(找到平均值和标准差)将是简单的部分,但我无法找到一种似乎可以正确 reshape 数据以开始该过程的方法。

非常感谢您的帮助。

最佳答案

有几种不同的方法可以解决它。 reshape2是一个有用的软件包。
就个人而言,我喜欢使用 data.table
下面是一步一步

如果 myDF是你的data.frame :

library(data.table)
DT <- data.table(myDF)

DT

# this will get you your mean and SD's for each column
DT[, sapply(.SD, function(x) list(mean=mean(x), sd=sd(x)))]

# adding a `by` argument will give you the groupings
DT[, sapply(.SD, function(x) list(mean=mean(x), sd=sd(x))), by=ID]

# If you would like to round the values: 
DT[, sapply(.SD, function(x) list(mean=round(mean(x), 3), sd=round(sd(x), 3))), by=ID]

# If we want to add names to the columns 
wide <- setnames(DT[, sapply(.SD, function(x) list(mean=round(mean(x), 3), sd=round(sd(x), 3))), by=ID], c("ID", sapply(names(DT)[-1], paste0, c(".men", ".SD"))))

wide

   ID Obs.1.men Obs.1.SD Obs.2.men Obs.2.SD Obs.3.men Obs.3.SD
1:  1    35.333    8.021    36.333   10.214      33.0    9.644
2:  2    29.750    3.594    32.250    4.193      30.5    5.916
3:  3    41.500    4.950    43.500    4.950      39.0    4.243

此外,这可能有帮助,也可能没有帮助
> DT[, sapply(.SD, summary), .SDcols=names(DT)[-1]]
        Obs.1 Obs.2 Obs.3
Min.    25.00 28.00 22.00
1st Qu. 29.00 31.00 27.00
Median  33.00 32.00 36.00
Mean    34.22 36.11 33.22
3rd Qu. 38.00 40.00 37.00
Max.    45.00 48.00 42.00

关于r - 为data.frame中的多个变量按组计算平均值和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367436/

相关文章:

r - 如何从高维 3d 数组中获取统计向量?

r - 当我在 R 中使用 rvest 包解析网站时,我的用户代理是什么?

r - ggplot2 scale_x_datetime 造成烦恼

聚合/by 的反转?

c++ - 如何聚合 float 组并使用可并行化方法获得精确结果?

python - 在 Pandas 中使用列名作为新属性

删除反向重复行

r - R中的分组/bin/bucket数据并获取每个bucket的计数和每个bucket的值的总和

r - 获取分组数据集中变量及其对应值的所有组合

reshape 错误 - 无效的 'row.names' 长度