我需要从 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 点后的值?逻辑语句在函数/循环之外工作。
我们可以获取日期(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