找到R中两个时间范围(POSIXct)之间的平均值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到R中两个时间范围(POSIXct)之间的平均值相关的知识,希望对你有一定的参考价值。
我的数据在表格中
Time Value
2017-01-01 01:00:00 10
2017-01-01 01:30:00 12.25
2017-01-01 01:40:00 12.76
2017-01-01 02:10:00 17.57
2017-01-01 03:00:00 19.01
2017-01-01 03:08:00 14.41
2017-01-01 04:00:00 11.23
class:Time - Posixct Value - Numeric
现在,我想找到R的2017-01-01 01:00:00和2017-01-01 03:00:00的时间范围之间的Value值的平均值。我这次失败了很难系列数据。我怎么做?
答案
为ymd_hms函数加载库lubridate
library(lubridate)
Time_Val_dataframe <- data.frame(Time=c("2017-01-01 01:00:00","2017-01-
01 01:30:00", "2017-01-01 01:40:00", "2017-01-01 02:10:00","2017-01-01
03:00:00", "2017-01-01 03:08:00","2017-01-01 04:00:00"), Value=c(10,
12.25, 12.76, 17.57, 19.01, 14.41, 11.23))
从字符到时间改变时间的类
Time_Val_dataframe$Time <- ymd_hms(Time_Val_dataframe$Time)
library(dplyr)
Time_Val_dataframe %>%
filter(ymd_hms("2017-01-01 03:00:00") > Time &
Time > ymd_hms("2017-01-01 01:00:00")) %>% summarise(mean=mean(Value))
平均值:14.19333
Time_Val_dataframe %>%
filter(ymd_hms("2017-01-01 03:00:00") >= Time &
Time >= ymd_hms("2017-01-01 01:00:00")) %>% summarise(mean=mean(Value))
意思是:14.318
Time_Val_dataframe %>%
filter(ymd_hms("2017-01-01 03:00:00") > Time &
Time >= ymd_hms("2017-01-01 01:00:00")) %>% summarise(mean=mean(Value))
意思是:13.145
Time_Val_dataframe %>%
filter(ymd_hms("2017-01-01 03:00:00") >= Time &
Time > ymd_hms("2017-01-01 01:00:00")) %>% summarise(mean=mean(Value))
意思是:15.3975
希望这可以帮助! (^წ^)
另一答案
希望这可以帮助!
library(dplyr)
df %>%
filter(between(Time, as.POSIXct('2017-01-01 01:00:00'), as.POSIXct('2017-01-01 03:00:00'))) %>%
summarise(mean = mean(Value))
#sample data
> dput(df)
structure(list(Time = structure(c(1483212600, 1483214400, 1483215000,
1483216800, 1483219800, 1483220280, 1483223400), class = c("POSIXct",
"POSIXt"), tzone = ""), Value = c(10, 12.25, 12.76, 17.57, 19.01,
14.41, 11.23)), .Names = c("Time", "Value"), row.names = c(NA,
-7L), class = "data.frame")
另一答案
1)假设输入DF
在下面的注释中可重复显示(并且如果有多于一天你想要在指定时间之间的所有天数的平均值),那么将时间提取为字符串,执行所需的子集和采取平均值。没有使用包裹。
tim <- sub(".* ", "", DF$Time)
mean(DF$Value[tim >= "01:00:00" & tim <= "03:00:00"])
## [1] 14.318
1a)第一行可以是:
tim <- format(DF$Time, "%H:%M:%S")
2)如果有几天并且每天的平均值需要分开,那么:
DF2 <- transform(DF, Date = as.Date(Time), Time = sub(".* ", "", Time))
DF0 <- subset(DF2, Time >= "01:00:00" & Time <= "03:00:00")
aggregate(Value ~ Date, DF0, mean)
## Date Value
## 1 2017-01-01 14.318
注意
Lines <- "Time,Value
2017-01-01 01:00:00,10
2017-01-01 01:30:00,12.25
2017-01-01 01:40:00,12.76
2017-01-01 02:10:00,17.57
2017-01-01 03:00:00,19.01
2017-01-01 03:08:00,14.41
2017-01-01 04:00:00,11.23"
DF <- read.csv(text = Lines)
DF$Time <- as.POSIXct(DF$Time)
以上是关于找到R中两个时间范围(POSIXct)之间的平均值的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中使用 as.POSIXct 为相同的字符结构提供 na