2

我刚刚清理了我从 Excel 电子表格中抓取的数据框,其中包括从一些数字中删除百分比符号,请参阅Removing Percentages from a Data Frame

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

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

我想找到每个一式三份的平均值(幸运的是,它们是按顺序排列的)并创建一个具有八行和相同数量列的新数据框。

我尝试使用,

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))

我手工计算的;它应该是减少的结果。

谢谢, ...

任何帮助将不胜感激。

4

2 回答 2

4

codegolf 的好任务!

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

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

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

t(t(DF1) %*% diag(8)[rep(1:8,each=3),]/3)
于 2013-01-18T13:18:15.570 回答
1

这有效:

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

?by

于 2013-01-18T13:06:25.347 回答