簡體   English   中英

時間段 R 的條件總和

[英]Conditional sum for time period R

我有一大組數據,包括開始時間、停止時間和值。 開始和停止時間因行而異,以 5 分鍾為增量。 我正在嘗試創建一個具有 5 分鍾間隔的新數據框,以及該間隔在一行的開始和停止范圍內的所有行的總和。

我有一個可以工作的腳本,但它使用了一個 for 循環來計算我的間隔數據幀的每一行的總和。

關於如何更快更有效地做到這一點的任何建議? 目前可能需要很長時間才能運行。

樣本數據集“數據”

start           stop           Volume
7/1/2013 0:00   7/1/2013 1:00   10
7/1/2013 0:15   7/1/2013 1:00   5
7/1/2013 0:30   7/1/2013 0:40   3
7/1/2013 0:50   7/1/2013 0:55   1

示例 Output 數據幀名為“sum_mw”

IntervalStart   IntervalEnd     Sum_Volume
7/1/2013 0:00   7/1/2013 0:05   10.00 
7/1/2013 0:05   7/1/2013 0:10   10.00 
7/1/2013 0:10   7/1/2013 0:15   10.00 
7/1/2013 0:15   7/1/2013 0:20   15.00 
7/1/2013 0:20   7/1/2013 0:25   15.00 
7/1/2013 0:25   7/1/2013 0:30   15.00 
7/1/2013 0:30   7/1/2013 0:35   18.00 
7/1/2013 0:35   7/1/2013 0:40   18.00 
7/1/2013 0:40   7/1/2013 0:45   15.00 
7/1/2013 0:45   7/1/2013 0:50   15.00 
7/1/2013 0:50   7/1/2013 0:55   16.00 
7/1/2013 0:55   7/1/2013 1:00   15.00 

這是我正在使用的示例代碼。

   library(lubridate)

    data$start<-mdy_hm(data$start,tz="UTC")
    data$stop<-mdy_hm(data$stop,tz="UTC")

    sum_mw$IntervalStart<-mdy_hm(sum_mw$IntervalStart,tz="UTC")
    sum_mw$IntervalEnd<-mdy_hm(sum_mw$IntervalEnd,tz="UTC")

    sum_mw$Sum_Volume<-0

    for (i in 1:nrow(sum_mw))
    {
    sum_mw$Sum_Volume[i] <- sum(data[data$start<=sum_mw$IntervalStart[i] & data$stop>=sum_mw$IntervalEnd[i],][,3],na.rm=T)
    }

這是tidyverse中的一個選項。 將列轉換為 DateTime seq后,使用map2循環對應的“開始”、“停止”值, by 5 min的間隔獲取時間序列,取消unnest list列,按“間隔”分組,得到sum '體積'

library(tidyverse)
library(lubridate)
df1 %>% 
   mutate_at(1:2, mdy_hm) %>% 
   transmute(Interval = map2(start, stop, seq, by = '5 min'), Volume) %>% 
   unnest(Interval) %>% 
   group_by(Interval) %>% 
   summarise(Sum_Volume = sum(Volume))

數據

df1 <- structure(list(start = c("7/1/2013 0:00", "7/1/2013 0:15", "7/1/2013 0:30", 
"7/1/2013 0:50"), stop = c("7/1/2013 1:00", "7/1/2013 1:00", 
"7/1/2013 0:40", "7/1/2013 0:55"), Volume = c(10L, 5L, 3L, 1L
)), class = "data.frame", row.names = c(NA, -4L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM