r - 平均相对于时间的值

标签 r datetime

我有以下数据集,其中包含日期时间和相应的值。时间间隔为每 10 分钟一次。我需要以 15 分钟的间隔生成新行。

例如,15:40 的值为 599,15:50 的值为 594,因此需要在两者之间生成一个新行,即 15:45 的平均值为 599 和 594,即 596.5

即,我需要生成 10 到 20 之间的平均值以获得 16:15 的值;和 40 & 50 得到 16:45 的值。 00、30的值保持不变

Date...Time       RA.CO2
6/15/2017 15:40   599
6/15/2017 15:50   594
6/15/2017 16:00   606
6/15/2017 16:10   594
6/15/2017 16:20   594
6/15/2017 16:30   594
6/15/2017 16:40   594
6/15/2017 16:50   594
6/16/2017 0:00    496.25
6/16/2017 0:10    500
6/16/2017 0:20    496.25
6/16/2017 0:30    496.25
6/16/2017 0:40    600
6/16/2017 0:50    650
6/16/2017 1:00    700 

str(df)
'data.frame':   6092 obs. of  2 variables:
 $ Date...Time: chr  "6/15/2017 15:40" "6/15/2017 15:50" "6/15/2017 16:00" 
 "6/15/2017 16:10" ...
$ RA.CO2     : num  599 594 606 594 594 594 594 594 594 594 ...

输出

 Date...Time          RA.CO2
 6/15/2017 15:45      596.5
 6/15/2017 16:00      606
 6/15/2017 16:15      594
 6/15/2017 16:30      594
 6/15/2017 16:45      594
 6/16/2017 0:00       496.25
 6/16/2017 0:15       498.125
 6/16/2017 0:30       496.25
 6/16/2017 0:45       625
 6/16/2017 1:00       700

最佳答案

我们可以使用 tidyr 扩展数据框,使用 imputeTS 通过线性插值来估算缺失值。

library(dplyr)
library(tidyr)
library(lubridate)
library(imputeTS)

dt2 <- dt %>%
  mutate(Date...Time = mdy_hm(Date...Time)) %>%
  mutate(Date = as.Date(Date...Time)) %>%
  group_by(Date) %>%
  complete(Date...Time = seq(min(Date...Time), max(Date...Time), by = "5 min")) %>%
  mutate(RA.CO2 = na.interpolation(RA.CO2)) %>%
  ungroup() %>%
  select(Date...Time, RA.CO2)
dt2
# A tibble: 22 x 2
           Date...Time RA.CO2
                <dttm>  <dbl>
 1 2017-06-15 15:40:00  599.0
 2 2017-06-15 15:45:00  596.5
 3 2017-06-15 15:50:00  594.0
 4 2017-06-15 15:55:00  600.0
 5 2017-06-15 16:00:00  606.0
 6 2017-06-15 16:05:00  600.0
 7 2017-06-15 16:10:00  594.0
 8 2017-06-15 16:15:00  594.0
 9 2017-06-15 16:20:00  594.0
10 2017-06-15 16:25:00  594.0
# ... with 12 more rows

我的输出与您想要的输出不完全相同。这是因为:

  1. 不清楚如何获取 6/16/2017 0:10 中的值。
  2. 为什么有时间隔是5分钟,有时是10分钟?
  3. 为什么要包含最后三行?最后三行的值填充规则也不明确。

不过,我认为我的解决方案为您提供了完成此任务的可能方法。您可能需要自己调整代码以适应那些不明确的规则。

数据

dt <- read.table(text = "Date...Time       RA.CO2
'6/15/2017 15:40'   599
                 '6/15/2017 15:50'   594
                 '6/15/2017 16:00'   606
                 '6/15/2017 16:10'   594
                 '6/15/2017 16:20'   594
                 '6/15/2017 16:30'   594
                 '6/15/2017 16:40'   594
                 '6/15/2017 16:50'   594
                 '6/16/2017 0:00'    496.25
                 '6/16/2017 0:10'    496.25
                 '6/16/2017 0:20'    496.25
                 '6/16/2017 0:30'    496.25",
                 header = TRUE, stringsAsFactors = FALSE)

关于r - 平均相对于时间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117261/

相关文章:

c# - DateTime 应该存储在世界各地都可以访问的网站中的 UTC 时间还是(服务器的)本地时间

Java 8 LocalDate 不会解析有效的日期字符串

Java API 用于获取一年中特定时区夏令时的开始和结束详细信息

r - 使用 httr 为 Trello 创建 oauth token 时如何修复 "invalid return_url"错误?

r - 组合具有相同值的列号

php - 在 PHP 中将一种日期格式转换为另一种日期格式

python-3.x - 奇怪的 Pandas 日期切片行为(不切片日期)

mysql - R,在 MAC 上安装 "RMySQL"-curl : (23) Failed writing body

在 Windows Server 2012 上从 R 运行 Linux 命令

regex - 使用正则表达式拆分字符串