r - R中按时间的平均值

标签 r time average analysis seconds

我每秒测量一次化合物浓度。我想做 30 秒和 60 秒的平均值。我一直在阅读这里的帖子,我尝试了 lubridatedplyr。但没有运气。我正在努力使这项工作,但我一直无法做到。我正在从 SAS 过渡到 R,所以请耐心等待。

这是我的数据:

head (data)#show the first 6 rows

   Date     Time  Temp      Appb    Bppb    Cppb     Dppb    Eppb      Fppb

1 10/30/17 21:32:33 25.23 -0.469304 22.4445 35.5993 -18.4843 52.0488 -2.947340   
2 10/30/17 21:32:34 25.23 -1.255780 21.8248 34.2364 -20.9051 47.4344 -2.071230  
3 10/30/17 21:32:35 25.23 -0.769233 21.1590 30.5892 -20.9347 42.6061 -0.991607  
4 10/30/17 21:32:36 25.23 -0.874262 21.3353 25.4841 -19.6127 38.3224 -0.452383  
5 10/30/17 21:32:37 25.24 -0.819439 21.1916 21.4919 -16.5991 36.1331 -0.150002  
6 10/30/17 21:32:38 25.24 -1.895730 21.5345 18.0576 -17.2539 31.7448 -0.311064   

最佳答案

那么,您可以执行以下操作:

data$time_bucket <- 
  as.POSIXct(round(as.numeric(as.POSIXct(paste(data$Date, data$Time), format="%m/%d/%y %H:%M:%S"))/30)*30, origin='1970-01-01')

这可能看起来有点复杂,但它做了以下事情:

  1. as.POSIXct(paste(data$Date, data$Time), format="%m/%d/%y %H:%M:%S") 将日期粘贴在一起和时间列来创建一个“日期时间”对象。
  2. as.numeric 将其转换为“纪元”数字 - 自 1970 年 1 月 1 日以来的秒数
  3. 除以 30,舍入并乘以 30 - 这将创建 30 秒的时间段。舍入到相同数字的所有时间在舍入后将具有相同的“标签”。
  4. 最后使用 as.POSIXct 将其转换为“datetime”。

完成所有这些后,您可以按时间段取平均值,例如使用 dplyr:

data %>% group_by(time_bucket) %>%
  summarize(mean(Temp))

希望这能回答您的问题。

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

相关文章:

r - 自动确定情节图例的位置

python - 创建一个计算 3 个数字的平均值的 Python 函数

python - C或Python的3个元素的移动平均值

r - 用最后一个非 NA 值加上另一个向量中的值以滚动方式填充向量中的 NA 值

r - 如何捕获字符串中的 dplyr 查询

r - 数据表1.8.1。 : “DT1 = DT2” is not the same as DT1 = copy(DT2)?

objective-c - 比较 Objective-C 中的时间和日期

c++ - 测量 CPU/内存消耗

go - 如何在 Go 中解析 ISO 8601 时间戳?

r - 如何根据 R 中的 ID 对列进行平均?