繁体   English   中英

按 5 分钟聚合数据,不包括最大值和最小值

[英]aggregate data by 5min excluding max and min

我有一个像这样的数据框:

Time    <- seq.POSIXt(as.POSIXct("2017-11-14 00:01:00 CET"), as.POSIXct("2017-11-14 00:15:00 CET"), units = "minute", by=60)
A <- c(2,3,5,2,5,8,17,3,5,8,17,3,5,1,5)
B <- c(1,1,2,1,2,1,2,2,2,4,6,7,8,8,9)

DF <- data.frame(Time=Time, A=A, B=B)

并且我想要一个“newDF”,其中我将数据聚合 5 分钟,但是,对于每一列,聚合前的最大值/最小值不包括在内。

使用 dplyr 我得到了这样的东西:

DF$TimeStamp_round<-floor_date(DF$Time,unit="5 minutes")
DF<-DF %>%
  group_by(TimeStamp_round) %>%
  mutate(TimeStamp_count = cur_group_id())

newDF<-DF %>%
  group_by(TimeStamp_count) %>%
  summarise(across(where(is.numeric), mean))

但我仍然没有设法在 newDF 中的 summarise() 函数之前排除最大值/最小值

注意:我不想为每一列手动做,因为在真正的 DF 中,列是 350

我们可以在按“TimeStamp_round”分组后取mean之前删除值的range

library(dplyr)
DF %>%
     group_by(TimeStamp_round) %>% 
     summarise(across(A:B, ~ mean(.[!. %in% range(.)])), .groups = 'drop')

或者如果有更多列并且只想获得numericmean

DF %>%
    select(-Time) %>%
    group_by(TimeStamp_round) %>% 
    summarise(across(where(is.numeric), 
           ~ mean(.[!. %in% range(.)])), .groups = 'drop')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM