特定时间范围的时间平均值(r)

特定时间范围的时间平均值(r),r,datetime,filter,R,Datetime,Filter,我试图提取每小时0到40分钟之间所有变量的平均值 dput(head(df)) structure(list(DateTime = structure(c(1563467460, 1563468060, 1563468660, 1563469260, 1563469860, 1563470460), class = c("POSIXct", "POSIXt"), tzone = "GMT"), date = structure(c(1563467460, 1563468060, 1563

我试图提取每小时0到40分钟之间所有变量的平均值

dput(head(df))

structure(list(DateTime = structure(c(1563467460, 1563468060, 
1563468660, 1563469260, 1563469860, 1563470460), class = c("POSIXct", 
"POSIXt"), tzone = "GMT"), date = structure(c(1563467460, 1563468060, 
1563468660, 1563469260, 1563469860, 1563470460), class = c("POSIXct", 
"POSIXt"), tzone = "GMT"), Date = structure(c(18095, 18095, 18095, 
18095, 18095, 18095), class = "Date"), TimeCtr = structure(c(1563467460, 
1563468060, 1563468660, 1563469260, 1563469860, 1563470460), class = c("POSIXct", 
"POSIXt"), tzone = "GMT"), MassConc = c(0.397627, 0.539531, 0.571902, 
0.608715, 0.670382, 0.835773), VolConc = c(175.038, 160.534, 
174.386, 183.004, 191.074, 174.468), NumbConc = c(234.456, 326.186, 
335.653, 348.996, 376.018, 488.279), MassD = c(101.426, 102.462, 
101.645, 102.145, 101.255, 101.433)), .Names = c("DateTime", 
"date", "Date", "TimeCtr", "MassConc", "VolConc", "NumbConc", 
"MassD"), row.names = c(NA, 6L), class = "data.frame")
到目前为止我所做的

 hourly_mean<-mydata %>% 
  filter(between(as.numeric(format(DateTime, "%M")), 0, 40)) %>% 
  group_by(DateTime=format(DateTime, "%Y-%m-%d %H")) %>%
  summarise(variable1_mean=mean(variable1))
小时平均值%
过滤器(介于(如.numeric(格式为DateTime,“%M”))、0、40)之间%>%
分组依据(日期时间=格式(日期时间,%Y-%m-%d%H))%>%
总结(可变1_平均值=平均值(可变1))

但它给了我整个时期的一个平均值。非常欢迎任何帮助。

我们可以将
日期时间
转换,使用
上限日期
和小时单位对
日期时间
进行四舍五入,从
日期时间
中提取分钟,并
过滤
以保留少于40分钟的分钟,
小时
分组,并取
平均值

library(lubridate)
library(dplyr)

df %>%
  dplyr::mutate(DateTime = ymd_hm(DateTime), 
         hour = ceiling_date(DateTime, "hour"),  
         minutes =  minute(DateTime)) %>%
  filter(minutes <= 40) %>%
  group_by(hour) %>%
  summarise_at(vars(ends_with("Conc")), mean)
库(lubridate)
图书馆(dplyr)
df%>%
dplyr::mutate(DateTime=ymd_hm(DateTime),
小时=上限日期(日期时间,“小时”),
分钟=分钟(日期时间))%>%
过滤器(分钟%
分组单位(小时)%>%
总结(变量(以“Conc”结尾)、平均值)
数据

df <- structure(list(DateTime = structure(1:7, .Label = c("2019-08-0810:07", 
"2019-08-0810:17", "2019-08-0810:27", "2019-08-0810:37", "2019-08-0810:47", 
"2019-08-0810:57", "2019-08-0811:07"), class = "factor"), MassConc = c(0.556398, 
1.06868, 0.777654, 0.87289, 0.789704, 0.51948, 0.416676), NumbConc = c(588.069, 
984.018, 964.634, 997.678, 1013.52, 924.271, 916.357), VolConc = c(582.887, 
979.685, 963.3, 994.178, 1009.52, 922.104, 916.856), Conc = c(281.665, 
486.176, 420.058, 422.101, 429.841, 346.539, 330.282)), class = 
"data.frame", row.names = c(NA, -7L))

df而不是“summary_at..”术语,我放了“summary(mass=mean(mass)),因为我的实际列名不是可变的1、2等,而是“mass”等。最后,它不起作用,显示错误消息“0行。所有格式都无法解析。找不到格式。“@user2928318错误似乎不是因为
summary
,而是
ymd\u hm
。尝试
df%>%mutate(DateTime=ymd\u hm(DateTime))
它是否工作或显示
NA
并带有相同的警告?您能否尝试
as.POSIXct(df$DateTime,format=“%Y-%m-%d%H:%m”)
它是否工作或返回
NA
。您可能会显示一些不同的数据格式。您能否发布
dput(head(mydata))
?谢谢,Ronak。第一个术语“df%>%变异(DateTime=ymd_hm(DateTime))。”正在工作,但下一个术语似乎不工作。我的DateTime已经是POSIXct格式。请在上面查找我的数据更新。只修改了列名。@user2928318如果您可以发布
dput
,这将非常有帮助,因为当我复制粘贴您的数据时,它似乎对我有效。请参阅更新的答案,您可以使用我的数据并检查它是否有效rks没有错误吗?我的帖子已经更新了。我之前刚刚发布了整个数据集的样本。错误是“
。fn
必须是长度为1 strin”。