मेरे पास नीचे जैसा डेटा सेट है:

Timestamp                Value1   Value2
2020-10-29 05:00:00       10       20
2020-10-29 05:00:01       10       20
2020-10-29 05:00:02       11       22
2020-10-29 05:00:03       11       22

और इसी तरह, एक सेकंड के अंतराल में, और कुछ घंटों तक डेटा। मैं औसत मूल्य दो मिनट उत्पन्न करना चाहता हूं, लेकिन डेटा को बाएं संरेखित करना चाहता हूं। अनिवार्य रूप से, 2020-10-29 05:00:00 पर 2 मिनट का रोलिंग औसत 2020-10-29 05:00:00 और 2020-10-29 05:01:59 के बीच डेटा बिंदुओं का औसत होना चाहिए। मैंने data %>% group_by(Timestamp =cut (Timestamp, breaks="2min"))%>% summarize(Meanval1=mean(Value1), Meanval2=mean(Value2) का उपयोग किया है लेकिन यह अधिकार डेटा को संरेखित करता है। मैं इसे संरेखित कैसे छोड़ सकता हूं? धन्यवाद!

r
0
FlyingPickle 29 अक्टूबर 2020, 15:45

1 उत्तर

सबसे बढ़िया उत्तर

आप lubridate::floor_date का उपयोग करके Timestamp कॉलम को निकटतम दो मिनट तक गोल कर सकते हैं। यदि आप group_by यह नया कॉलम करते हैं, तो आपको दो मिनट का एक बाएं-संरेखित माध्य मिलेगा:

library(dplyr)

df %>% 
  mutate(time = lubridate::floor_date(df$TimeStamp, "2 minutes")) %>%
  group_by(time) %>%
  summarize(mean_val1 = mean(Value1), mean_val2 = mean(Value2))
#> # A tibble: 9 x 3
#>   time                mean_val1 mean_val2
#>   <dttm>                  <dbl>     <dbl>
#> 1 2020-10-29 05:00:00     10.2       19.9
#> 2 2020-10-29 05:02:00      9.84      20.0
#> 3 2020-10-29 05:04:00     10.1       19.9
#> 4 2020-10-29 05:06:00      9.72      20.3
#> 5 2020-10-29 05:08:00      9.98      19.9
#> 6 2020-10-29 05:10:00      9.98      20.0
#> 7 2020-10-29 05:12:00     10.1       20.0
#> 8 2020-10-29 05:14:00     10.0       20.1
#> 9 2020-10-29 05:16:00     10.0       20.2

उपयोग किया गया डेटा

set.seed(69)
t  <- seq(as.POSIXct("2020-10-29 05:00:00"), by = "1 sec", length.out = 1000)
df <- data.frame(TimeStamp = t, 
                 Value1 = sample(8:12, 1000, TRUE), 
                 Value2 = sample(18:22, 1000, TRUE))

head(df)
#>             TimeStamp Value1 Value2
#> 1 2020-10-29 05:00:00      8     20
#> 2 2020-10-29 05:00:01     10     21
#> 3 2020-10-29 05:00:02      9     19
#> 4 2020-10-29 05:00:03     12     19
#> 5 2020-10-29 05:00:04     12     19
#> 6 2020-10-29 05:00:05      9     18

0
Allan Cameron 29 अक्टूबर 2020, 16:04