一天后计算值的平均变化

时间:2019-08-07 11:55:09

标签: r date mean difference

我有一个带有值及其时间戳的数据框。数据如下:

library(lubridate)
df <- data.frame(date1= dmy_hms(c("01.08.2019 12:11:32", "01.05.2019 10:01:17")),
                 value1= c(60, 70),
                 date2= dmy_hms(c("01.08.2019 12:41:38", "01.05.2019 11:51:17")),
                 value2= c(80, 60),
                 date3= dmy_hms(c("02.08.2019 12:01:09", "02.05.2019 10:11:34")),
                 value3= c(10, 40),
                 date4= dmy_hms(c("02.08.2019 12:41:38", "02.05.2019 11:51:17")),
                 value4= c(30, 80))
df
                date1 value1               date2 value2               date3 value3               date4 value4
1 2019-08-01 12:11:32     60 2019-08-01 12:41:38     80 2019-08-02 12:01:09     10 2019-08-02 12:41:38     30
2 2019-05-01 10:01:17     70 2019-05-01 11:51:17     60 2019-05-02 10:11:34     40 2019-05-02 11:51:17     80

我需要找出一天后值如何变化,只关心一个小时。

上方数据的第一行:value160)和value280)都记录在同一天的12:XX:XX ,因此今天12:XX:XX的当前时间为70。第二天12:XX:XX的平均值为20。这意味着第一行的-50发生了变化。

第二行:这里value170的{​​{1}},一天后是10:XX:XX的{​​{1}},所以更改为10:XX:XX40从一天到第二天的更改为-30。因此,平均变化为11:XX:XX

因此,我的预期输出是

+20

1 个答案:

答案 0 :(得分:1)

我将数据结构更改为long。至少对我来说,这使任务更加直观。 这是您要找的吗?

library(lubridate)
library(dplyr)

df <- data.frame(date1= dmy_hms(c("01.08.2019 12:11:32", "01.05.2019 10:01:17")),
                 value1= c(60, 70),
                 date2= dmy_hms(c("01.08.2019 12:41:38", "01.05.2019 11:51:17")),
                 value2= c(80, 60),
                 date3= dmy_hms(c("02.08.2019 12:01:09", "02.05.2019 10:11:34")),
                 value3= c(10, 40),
                 date4= dmy_hms(c("02.08.2019 12:41:38", "02.05.2019 11:51:17")),
                 value4= c(30, 80))
df

df.long <- as.data.frame(matrix(t(df), ncol=2, byrow=T))
df.long$Date <- as.Date(df.long$V1)
df.long$Time <-  format(as.POSIXct(df.long$V1) ,format = "%H") 
df.long <- df.long[c(2:4)]
df.long$V2 <- as.numeric(as.character(df.long$V2))
daychange <- df.long %>% group_by(Date, Time) %>% summarise(d.h.mean = mean(V2))
daychange$Date <- strftime(daychange$Date,format = "%Y-%m")

daychange %>% group_by(Date, Time)  %>% mutate(change = d.h.mean-lag(d.h.mean))

# A tibble: 6 x 4
# Groups:   Date, Time [3]
Date    Time  d.h.mean change
<chr>   <chr>    <dbl>  <dbl>
  1 2019-05 10          70     NA
2 2019-05 11          60     NA
3 2019-05 10          40    -30
4 2019-05 11          80     20
5 2019-08 12          70     NA
6 2019-08 12          20    -50
相关问题