当前位置: 首页 > 知识库问答 >
问题:

在设定的终点之间对时间序列的一部分求和

杨安歌
2023-03-14

我有一个雨量计数据的时间序列(xts),我希望能够从列表中计算出一个开始时间点和结束时间点之间的所有降雨量。然后制作一个新的数据帧,即StormNumber和TotalRain

> head(RainGage)
                    Rain_mm
2019-07-01 00:00:00       0
2019-07-01 00:15:00       0
2019-07-01 00:30:00       0
2019-07-01 00:45:00       0
2019-07-01 01:00:00       0
2019-07-01 01:15:00       0
head(StormTimes)
  StormNumber       RainStartTime         RainEndTime
1           1 2019-07-21 20:00:00 2019-07-22 04:45:00
2           2 2019-07-22 11:30:00 2019-07-22 23:45:00
3           3 2019-07-11 09:15:00 2019-07-11 19:00:00
4           4 2019-05-29 17:00:00 2019-05-29 20:45:00
5           5 2019-06-27 14:30:00 2019-06-27 17:15:00
6           6 2019-07-11 06:15:00 2019-07-11 09:00:00

我有一段代码,是我在过去尝试做类似的事情时从SO社区获得的(但提取数据而不是求和)。然而,我不知道它是如何工作的,所以我正在努力使它适应这种情况。

do.call(rbind, Map(function(x, y) RainGage[paste(x, y,  sep="/")], 
               StormTimes$RainStartTime, StormTimes$RainEndTime)

共有1个答案

齐永昌
2023-03-14

在这种情况下,我建议编写您自己的函数,然后使用应用来实现您想要的功能,例如:

dates <- c('2019-07-01 00:00:00', '2019-07-01 00:15:00',
           '2019-07-01 00:30:00', '2019-07-01 00:45:00',
           '2019-07-01 01:00:00', '2019-07-01 01:15:00')
dates <- as.POSIXct(strptime(dates, '%Y-%m-%d %H:%M:%S'))
mm <- c(0, 10, 10, 20, 0, 0)
rain <- data.frame(dates, mm)

number <- c(1,2)
start  <- c('2019-07-01 00:00:00','2019-07-01 00:18:00')
start  <- as.POSIXct(strptime(start, '%Y-%m-%d %H:%M:%S'))
end    <- c('2019-07-01 00:17:00','2019-07-01 01:20:00')
end    <- as.POSIXct(strptime(end, '%Y-%m-%d %H:%M:%S'))
storms <- data.frame(number, start, end)

# Sum of rain
f = function(x, output) {
    # Get storm number
    number = x[1]
    # Get starting moment
    start = x[2]
    # Get ending moment
    end = x[3]
    # Calculate sum
    output <- sum(rain[rain$dates >= start & rain$dates < end, 'mm'])
}

# Apply function to each row of the dataframe
storms$rain <- apply(storms, 1, f)
print(storms)

这就产生了:

   number                start                  end  rain
1       1  2019-07-01 00:00:00  2019-07-01 00:17:00    10
2       2  2019-07-01 00:18:00  2019-07-01 01:20:00    30

因此,storms中的一列rain现在包含了rain$mm的总和,这就是你所追求的。

希望这能帮到你!

 类似资料:
  • 问题内容: 我正在做一个自动化的查询。它需要查找最后一天晚上8点到晚上8点之间的所有交易。我当时正在考虑做这样的事情 对于自动查询,这很适合找出日期部分。但是变量的TIME部分是查询执行的当前时间。有没有一种快速简单的方法来将两个变量的时间部分硬编码为8:00 PM? 问题答案:

  • 这里有一个指向电子表格图像的链接。我在谷歌工作表中使用这个电子表格来跟踪不同类别的任务。 我想对F列中指定类别(如“admin”和“cleaning”)的每一行的任务所需时间求和。行的数量会因天而异,因此我无法使用设置行。

  • 我在一个列表中有8个点,我需要计算所有可能对之间的欧几里德距离。我可以编写一个for循环并继续计算距离,但是python/numpy/others有更好的方法吗? 坐标点:

  • 我有一个Java应用程序,它使用Prometheus库,以便在执行期间收集度量。稍后,我将Prometheus服务器链接到Grafana,以便可视化这些度量。我想知道是否可以让格拉法纳为这些度量显示一个自定义的X轴?通常的X轴是在当地时间。我能让它显示带有GPS/UTC时间戳的数据吗?有可能吗?如果是,需要什么?保存时间戳的附加度量参数? 我这样声明度量变量: 并添加如下所示的数据: 如有任何帮助

  • 我的任务是使用MATLAB和任何神经网络框架对时间序列数据进行分类。 更具体地描述任务:是计算机视觉领域的一个问题。Is是一项场景边界检测任务。 源数据是来自视频流的4个相邻帧直方图相关阵列。基于此数据,我们必须将此时间序列分为两类: “场景中断” “没有场景中断” 因此,每个源数据输入的网络输入是4个双倍值,输出是一个二进制值。我将在下面展示src数据的示例: 问题是,来自Matlab神经工具箱

  • 我有两个位置的谷歌api链接 http://maps.googleapis.com/maps/api/directions/json? 我从两个位置得到响应(距离