0

我正在尝试根据因子变量计算许多变量的均值,然后将这些均值导出到数据框中。

library(psych)
DATA = data.frame(labels=c("a","a","a","b","b","b"),data=matrix(1:36,nrow=6))
DATA
descriptivesD <- by(cbind(DATA$data.1, DATA$data.2, DATA$data.3), DATA$label, describe)
descriptivesD

str(descriptivesD)
all.means <- descriptivesD$mean
all.means     

我很确定 的分配descriptivesD$mean是错误的,因为分类变量的每个级别都是包含均值的 data.frame,但我不知道如何将它们导出到数据框中。

我的第一个问题是,当我在 by() 中使用函数 mean 而不是 describe 时出现错误。所以我继续描述并尝试导出唯一的平均元素。

理想情况下,我想将平均值保存在数据框中,其中第一列是计算它们的因子变量的水平,然后每列将是每个变量的平均值

label data.1 data.2 data.3
a     5      6      1
b     2      5      2

先感谢您。

4

2 回答 2

3

输出是 a list,因此获取信息的一种非常直接的方法是使用lapplyor sapply

> lapply(descriptivesD, `[`, "mean")
$a
   mean
V1    2
V2    8
V3   14

$b
   mean
V1    5
V2   11
V3   17

> sapply(descriptivesD, `[`, "mean")
$a.mean
[1]  2  8 14

$b.mean
[1]  5 11 17

如果你想要它作为 adata.frame或 a matrix,这里有一些选项,它们在演示上的差异很大。

> do.call(rbind, sapply(descriptivesD, `[`, "mean"))
       [,1] [,2] [,3]
a.mean    2    8   14
b.mean    5   11   17

> data.frame(sapply(descriptivesD, `[`, "mean"))
  a.mean b.mean
1      2      5
2      8     11
3     14     17

> do.call(cbind, lapply(descriptivesD, `[`, "mean"))
   mean mean
V1    2    5
V2    8   11
V3   14   17

但是,您也可以直接在 base R 中使用aggregate

> aggregate(cbind(data.1, data.2, data.3) ~ labels, DATA, mean)
  labels data.1 data.2 data.3
1      a      2      8     14
2      b      5     11     17
于 2013-09-19T16:15:53.583 回答
2
library(data.table)
dt = data.table(DATA)

dt[, lapply(.SD, mean), by = labels]
#   labels data.1 data.2 data.3 data.4 data.5 data.6
#1:      a      2      8     14     20     26     32
#2:      b      5     11     17     23     29     35
于 2013-09-19T16:59:29.753 回答