R语言 如何从日期框架中筛选小时间隔?

bcs8qyzn  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(156)

我想绘制一周内18:00 pm到7:00 am(日期为x轴)之间的数据。
我想把我的数据绘制沿着18:00 pm和7:00 am的时间间隔上。我每5分钟收集一次一周的数据,我试图过滤出所需的时间间隔,但我无法得到预期的结果。这是我到目前为止所做的:(我是R的新手)

class(Marzo$date)
Marzo$hms <- format(as.POSIXct(Marzo$date), "%H:%M:%S")
data1 <- Marzo %>%  filter(hms >="18:00:00" & hms <="7:00:00") %>% print(n=250) 
ggplot() +
  geom_line(data= data1, aes(x= date, y= RH3000, colour= "RH3000"),
lwd=1) +
  geom_line(data= data1, aes(x= date, y= RH4000, colour= "RH4000"),
lwd=1) +
  scale_colour_manual("", breaks=c("RH3000","RH4000"), values=c("blue4","turquoise1")) +
  scale_x_datetime(labels= date_format("%m-%d %H:%M"), date_breaks= "12 hours")

当我使用这个过滤器时,这就是我得到的:2023年3月13日23时45分
2023-03-13 23:50:01
2023年3月13日23时55分
2023年3月14日18时00分
2023年3月14日18时05分01秒
一旦它得到了00:00下午,它再次开始与小时18:00下午的第二天,而不是进行,直到得到7:00上午的第二天。对不起,如果我是一个有点误导买我不是英语。任何形式的帮助将派上用场。
此外,它将是伟大的摆脱直线之间显示的非选定的间隔。图形:enter image description here

6uxekuva

6uxekuva1#

您的代码的问题可能是您将日期和时间分开处理,这可能会在过滤或绘制时导致意外结果。相反,您可以使用as.POSIXct()函数将日期和时间合并到单个datetime变量中,这将允许您更准确地过滤和绘制数据。
下面是你的代码的一个更新版本,它可能会工作:(我不能尝试,因为我没有任何数据...)下次请粘贴一个最小的可复制样本。

# Convert date to datetime format
Marzo$date <- as.POSIXct(Marzo$date)

# Filter data for desired time interval
data1 <- Marzo %>% filter(format(date, "%H:%M:%S") >= "18:00:00" | format(date, "%H:%M:%S") <= "07:00:00")

# Plot data using datetime variable
ggplot(data1, aes(x = date, group = 1)) +
  geom_line(aes(y = RH3000, color = "RH3000"), size = 1) +
  geom_line(aes(y = RH4000, color = "RH4000"), size = 1) +
  scale_color_manual("", breaks=c("RH3000", "RH4000"), values=c("blue4", "turquoise1")) +
  scale_x_datetime(labels = date_format("%m-%d %H:%M"), date_breaks = "12 hours")

在这段代码中,我们首先使用as.POSIXct()将日期列转换为日期时间格式。然后,我们使用filter()选择下午7:00到第二天早上7:00之间的数据。请注意,我们使用|最后,我们使用date变量绘制数据,并按单个组分组,以避免x轴刻度的问题。

相关问题