R - for循环从数据帧创建值向量

时间:2014-06-14 22:54:50

标签: r for-loop append

我有一个15,000,000行的数据框,适用于12" Days"观察。此框架中的一列具有每天的值的总和 - 但这个数字对于1,000行(每天有大量观察值)是相同的。我需要制作一个包含12个总数的矢量并削减额外的东西。

我在没有for循环的情况下成功完成了这项工作:

day1 <- (dat[which(dat$Day == 1), ])[1, 6] # get 1st "Daily.Sum" val of ea. "dat$Day" lev.
day2 <- (dat[which(dat$Day == 2), ])[1, 6] # as "Daily.Sum" is 6th column
day3 <- (dat[which(dat$Day == 3), ])[1, 6]
## ...etc. to "day12"

当我用它来代替循环时:

daysums <- as.numeric()
for (i in 1:12) {
      if (dat$Day == i) {
            daysums <- append(daysums, dat[which(dat$Day == i), ][1, 6])
      }
}

我希望得到这个:

daysums
[1] 979426 1240724 1371640 ...etc. #ea. value = 1st obj. in vector "Daily.Sums" for a 
                                   # given day index in vector "dat$Day"

但是我得到了12个警告:

12: In if (dat$Day == i) { ... :
the condition has length > 1 and only the first element will be used

显然,我的for循环逻辑在这里存在缺陷。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您可以使用拆分功能

split(Dat,Dat$day)

答案 1 :(得分:0)

尝试:with(dat,{tapply(Daily.Sum,Day,mean)})