一式三份的意思

时间:2013-01-18 13:02:18

标签: r dataframe mean

我刚刚清理了一个我从excel电子表格中删除的数据框,除去了某些数字中的百分号,见Removing Percentages from a Data Frame

数据有二十四行,代表参数和一式三份进行的八次实验的结果。例如,一个人会得到什么,

DF1 <- data.frame(X = 1:24, Y = 2 * (1:24), Z = 3 * (1:24))

我想找到每个三次重复的平均值(幸运的是按顺序排列)并创建一个包含8行和相同数量列的新数据框。

我尝试使用

执行此操作
DF2 <- data.frame(replicate(3,sapply(DF1, mean)))

这给了我每列的平均值作为行三次。我想得到一个能给我的数据框,

data.frame(X = c(2,5,8,11,14,17,20,23), Y = c(4,10,16,22,28,34,40,23), Z = c(6,15,24,33,42,51,60,69))
我手工制作的;它应该是减少的结果。

谢谢,......

任何帮助都会感激不尽。

2 个答案:

答案 0 :(得分:4)

codegolf的好任务!

aggregate(DF1, list(rep(1:8, each=3)), mean)[,-1]

更一般地说,您应该将8替换为nrow(DF1)

...或者,我最喜欢的,使用矩阵乘法:

t(t(DF1) %*% diag(8)[rep(1:8,each=3),]/3)

答案 1 :(得分:1)

这有效:

foo <- matrix(unlist(by(data=DF1,INDICES=rep(1:8,each=3),FUN=colMeans)),
  nrow=8,byrow=TRUE)
colnames(foo) <- colnames(DF1)

查看?by