按组的平均值和标准偏差

时间:2015-12-07 03:35:11

标签: r

我有一个类似这样的数据框:

len(p_tag.contents)

我想计算以obs5为条件的obs 1到4的平均值和标准差,并将其放在表格格式中。列标题应为obs5为“0”或“1”的均值和平均值。因此,在这种情况下,表格将是4乘4型。

我试过

obs1 obs2 obs3 obs4 obs5
4     6    7     3    0
7     2    4     5    0
2     5    7     8    1
5     8    6     9    1
6     0    3     6    1
7     1    2     4    1

并且我不确定如何进一步获得正确的格式。

3 个答案:

答案 0 :(得分:3)

我们可以使用composer create-project laravel/laravel C:\xampp\whatever\whatever。我们将'data.frame'转换为'data.table'(data.table),将其从'wide'重新整形为'long'格式,然后使用setDT(df1)将其重新整形为'wide'格式。来自dcast的{​​{1}}可以使用多个dcast

data.table

答案 1 :(得分:1)

您可以分别计算平均值和标准差,然后将结果组合在一起:

means <- aggregate( .~ obs5, DF, mean)
rownames(means) <- paste("mean", means$obs5)
sds <- aggregate( .~ obs5, DF, sd)
rownames(sds) <- paste("sd", means$obs5)

tab <- rbind(means, sds)
tab <- tab[, -1]
tab <- t(tab)

结果:

     mean 0 mean 1     sd 0     sd 1
obs1    5.5   5.00 2.121320 2.160247
obs2    4.0   3.50 2.828427 3.696846
obs3    5.5   4.50 2.121320 2.380476
obs4    4.0   6.75 1.414214 2.217356

答案 2 :(得分:0)

有点啰嗦,但以正确的格式生成输出:

DF <- data.frame(obs1 = c(4, 7, 2, 5, 6, 7), obs2 = c(6, 2, 5, 8, 0, 1), obs3 = c(7, 4, 7, 6, 3, 2), obs4 = c(3, 5, 8, 9, 6, 4), obs5 = c(0, 0, 1, 1, 1, 1))

res <- by(DF[, -5], DF$obs5, FUN = function(x) rbind(colMeans(x), sqrt(diag(var(x)))))
res <- do.call(rbind, res)
rownames(res) <- paste(rep(c('mean', 'sd'), 2), rep(c(0, 1), c(2, 2)), sep = ".")
t(res)

#     mean.0     sd.0 mean.1     sd.1
#obs1    5.5 2.121320   5.00 2.160247
#obs2    4.0 2.828427   3.50 3.696846
#obs3    5.5 2.121320   4.50 2.380476
#obs4    4.0 1.414214   6.75 2.217356