【发布时间】:2020-07-08 09:40:21
【问题描述】:
希望这是一个关于 R 中循环的简单问题。我有一个由模拟结果组成的数据集。每列是来自一头奶牛的结果,每个月每天取一次,然后重复 100 次。所以列的总长度是3000。 我想计算每一天的模拟结果的平均值,以获得每一天、每一头奶牛的单个值。所以我需要计算第一个条目的平均值,第31个条目,第61个条目等等,然后计算第二个条目的平均值,第32个条目,第62个条目等等。我想最终为每头奶牛提供 30 个条目列。我一直在尝试使用 R 中的循环来做到这一点,但不知道怎么做。任何建议将不胜感激。
以下是一些示例数据:
a<-seq(from = 1, by = 1, length = 30)
b<-seq(from = 1, by = 0.5, length = 30)
c<-seq(from = 1, by = 2, length = 30)
cow1<-rep(a,100)
cow2<-rep(b,100)
cow3<-rep(c,100)
dat<-as.data.frame(cbind(cow1,cow2,cow3))
【问题讨论】:
-
如果您为每头奶牛创建一个 30 x 100 矩阵
cow1和apply(cow1,1,mean),您将获得日常收入。 -
@Xi'an,而不是
apply为什么不只是rowMeans(cow1) -
试试:
aggregate(dat, list(rep_len(1:30, nrow(dat))), mean) -
@GKi,我总是忘记
aggregate的非公式版本,我打算建议类似dat$Day <- rep_len(1:30, nrow(dat)); aggregate(.~Day, dat, mean)的东西 -
@DanielO 或:
aggregate(.~Day, cbind(dat,Day=rep_len(1:30, nrow(dat))), mean)
标签: r