在基础 R 中设置自定义时间范围的子集

问题描述 投票:0回答:1

我需要从 R 的气象站获取上午 9 点到第二天上午 9 点的气温列表,并将日期设置为第二天。数据的简化版本如下所示

日期时间 温度
2024-05-06 08:23:01 12
2024-05-06 09:27:01 10
2024-05-06 12:53:31 5
2024-05-07 01:28:16 30
2024-05-07 05:07:59 30
2024-05-07 09:36:48 9

我想生成一个仅包含上午 9 点:上午 9 点值的数据框,以便

日期时间 温度
2024-05-07 10
2024-05-07 5
2024-05-07 30
2024-05-07 30

我的职责是

subnine=function(esheet){
 mydates<-unique(as.Date(esheet$DateTime))
 sheet9<-esheet[0,]
 esheet$DateTime<-as.POSIXlt(esheet$DateTime)
 for (l in 2:length(mydates))
{ 
   dateslice<-subset(esheet,(as.Date(esheet$DateTime)==mydates[l-1]&esheet$DateTime$hour>=9)|(as.Date(esheet$DateTime)==mydates[l] & esheet$Datetime$hour<9))
   dateslice$DateTime<-mydates[l]+1
  sheet9<-rbind(sheet9,dateslice)
 }
return(sheet9)
}

它只返回第二天上午 9 点之前的值,所以

日期时间 温度
2024-05-07 30
2024-05-07 30

是什么阻止我的子集中 or(|) 语句的第一部分选择第一天上午 9 点后的值?逻辑语句在函数/循环之外工作。

r datetime subset weather
1个回答
0
投票

我们可以获取日期(dr)和时间(tr)范围,

subset
后者内的数据并将DateTime设置为最大值,即dr的第二个值。

> tr <- as.POSIXct(paste(dr <- range(as.Date(df$DateTime)), '09:00:00'))
> 
> subset(df, DateTime >= tr[1] & DateTime <= tr[2]) |> 
+   transform(DateTime=dr[2])
    DateTime Temp
2 2024-05-07   10
3 2024-05-07    5
4 2024-05-07   30
5 2024-05-07   30
© www.soinside.com 2019 - 2024. All rights reserved.