使用R基于TimeSeries数据添加行

时间:2019-04-06 04:50:23

标签: r time-series

考虑以下数据集;

scd <- read.table(text = "
2019-04-01 10:00:00 | 2019-04-01 12:00:00 | 10
2019-04-02 10:00:00 | 2019-04-02 12:00:00 | 5
2019-04-03 13:00:00 | 2019-04-03 15:00:00 | 7
2019-04-04 16:00:00 | 2019-04-04 19:00:00 | 5
2019-04-05 10:00:00 | 2019-04-05 12:00:00 | 6
2019-04-06 10:00:00 | 2019-04-06 12:00:00 | 5", sep = "|")

colnames(scd) <- c('start_date_ts', 'end_date_ts', 'people_count')

上面的代码由开始日期和结束日期以及时间组成,并假设每小时可以看到人员计数列中提到的计数增加。

例如,以第1行为例,它说从上午10点到下午12点,我预计计数会增加10。

  

2019-04-01 10:00:00 = 10 +实际数据

     

2019-04-01 11:00:00 = 10 +实际数据

     

2019-04-01 12:00:00 = 10 +实际数据

实际数据;

fc_data <- read.table(text = "
2019-04-01 10:00:00 | 10
2019-04-01 12:00:00 | 5
2019-04-04 19:00:00 | 5
2019-04-05 12:00:00 | 6
2019-04-06 08:00:00 | 3", sep = "|")

colnames(fc_data) <- c('pred_t', 'fpc')

我期待以下结果; (来自fc_data)

  

行1-10 + 10 = 20

     

行2-5 + 10 = 15

     

行3-5 + 5 = 10

     

行4-6 + 6 = 12

     

行5-3 + 0 = 3

我希望代码遍历每一行并与开始时间和结束时间匹配,并向我提供上面提供的输出。

我的方法;

fc_data$events_pc <- with(fc_data, ifelse(fc_data$pred_t == scd$start_date_ts | fc_data$pred_t == scd$end_date_ts &
                                        fc_data$pred_t == scd$end_date_ts,
                                      fc_data$fpc + scd$people_count, fc_data$fpc + 0))

尽管我将一些行加起来,但其他行实际上不匹配。我已经在堆栈中搜索了一些信息,但是找不到任何信息。任何输入都会很有帮助。

1 个答案:

答案 0 :(得分:2)

我们可以使用mapply并将start_date_ts中的end_date_tsscdpred_t进行匹配,获得相应的people_count并将其添加到fpc

mapply(function(x, y) {
   inds <- x >= scd$start_date_ts & x <= scd$end_date_ts
   if (any(inds))  
      y + scd$people_count[inds]
   else
      y
}, fc_data$pred_t, fc_data$fpc)

#[1] 20 15 10 12  3

请确保日期时间变量为POSIXct格式,如果不是,则需要进行更改。

fc_data$pred_t <- as.POSIXct(fc_data$pred_t)
scd[1:2] <- lapply(scd[1:2], as.POSIXct)