gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:31:13 25 4
gpt4 key购买 nike

编辑 -- 本题原题为<< 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com