基于相应日期的向量子集整数向量

时间:2014-06-10 02:03:41

标签: r date for-loop vector subset

小学问题:

我试图根据与我希望子集的向量对应的日期向量来对数据帧的向量进行子集化。以下面的数据框为例:

     Date    Time Axis1 Day Sum.A1.Daily
1 6/12/10 5:00:00    20   1           NA
2 6/12/10 5:01:00    40   1           NA
3 6/12/10 5:02:00    50   1           NA
4 6/13/10 5:03:00    10   2           NA
5 6/13/10 5:04:00    20   2           NA
6 6/13/10 5:05:00    30   2           NA

我想用每天的值总和填充右边的列。基本上,(1:3,5)应该= 110,而(4:6,5)应该= 60。

我知道有很多方法可以做到比我尝试做的更聪明/更快/更好(例如,我的日期变量是一个因素分为"等级"我我不知道如何访问),但我试图从头开始构建我的技能,并想弄清楚如何:

  1. 获取仅获取第1天值的数据$ Axis1的子集
  2. 获取数据$ Axis1的值的子集,该值仅获取第二天的值
  3. 将每天的值相加,并将它们放在第5列,覆盖" NA"
  4. 我成功地执行了与此类似的功能,以自动填写" Day"矢量,最初充满了" NA"价值(下)。但是当我考虑如何a)使用日期的子集,以及b)在子集化时求和时,我会陷入困境。

    在此先感谢您的帮助 - 也请让我知道我的问题是否更清楚/我是否违反了基本的堆栈溢出规则。我对R和整个编码社区都很陌生;感谢您的帮助!

    dates <-c("6/12/10","6/13/10")
    counts <- c(1:2)
    x <- nrow(data)
    
    for (i in 1:x) {
          for (j in 1:12) {
                if (data[i,1] == dates[j]) {
                      data[i,4] <- counts[j]
                }
          }
    }
    

2 个答案:

答案 0 :(得分:3)

使用ave

transform(dat,Sum.A1.Daily=ave(dat$Axis1,dat$Date,FUN=sum))
     Date    Time Axis1 Day Sum.A1.Daily
1 6/12/10 5:00:00    20   1          110
2 6/12/10 5:01:00    40   1          110
3 6/12/10 5:02:00    50   1          110
4 6/13/10 5:03:00    10   2           60
5 6/13/10 5:04:00    20   2           60
6 6/13/10 5:05:00    30   2           60

答案 1 :(得分:1)

另一种方法是使用data.table

#Let's say df is your dataset
library(data.table)
dt = as.data.table(df)
dt = dt[, Sum.A1.Daily := sum(Axis1), by = Date]