簡體   English   中英

R 過濾每組的時間序列數據

[英]R Filtering Time Series data for each group

我需要根據組過濾時間序列數據。 但是過濾必須在每個組的開始(-5 分鍾)和結束(-2 分鍾)進行,這意味着我想在每個組的開始(-5 分鍾)和結束(-2 分鍾)刪除行團體。

這是示例代碼:

Time <- c("2015-08-21T10:00:51", "2015-08-21T10:02:51", "2015-08-21T10:04:51", "2015-08-21T10:06:51", 
          "2015-08-21T10:08:51", "2015-08-21T10:10:51","2015-08-21T10:12:51", "2015-08-21T10:14:51", 
          "2015-08-21T10:16:51", "2015-08-21T10:18:51", "2015-08-21T10:20:51", "2015-08-21T10:22:51")
x <-  c(38.855, 38.664, 40.386, 40.386, 40.195, 40.386, 40.386, 40.195, 40.386, 38.855, 38.664, 40.386)
y <-  c("a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b")
data <- data.frame(Time,x,y)
data$Time <- as.POSIXct(data$Time, format = "%Y-%m-%dT%H:%M:%S")

Y 列向我們展示了組,在這種特殊情況下是ab

因此,對於此示例,我將刪除a級的 3 第一行和最后 2 行,對於 b 相同的事情(在我的原始數據中,根據行數將其刪除並不容易)。 所以我最終會得到這樣的東西:

                  Time      x y
4  2015-08-21 10:06:51 40.386 a
10 2015-08-21 10:18:51 38.855 b

我想指出這只是樣本數據!

感謝幫助!

我寧願根據時間列而不是行數過濾數據,我的原始數據的結構不像這樣很好,每組的行數各不相同。

那這個呢? 拆分data.frame,找到前五分鍾和最后兩分鍾,對行進行一些邏輯查找並輸出結果。

xy <- split(data, data$y)

xy <- lapply(xy, FUN = function(m) {
  m[(m$Time > min(m$Time) + (5 * 60)) & ((max(m$Time) - (2 * 60)) > m$Time), ]
})

do.call("rbind", xy)

                    Time      x y
a    2015-08-21 10:06:51 40.386 a
b    2015-08-21 10:18:51 38.855 b

我知道現在提供dplyr解決方案也dplyr 所以在這里。

library(dplyr)

data %>%
  group_by(y) %>%
  filter((Time > (min(Time) + (5*60))) & (max(Time) - (2*60) > Time))

暫無
暫無

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

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