【问题标题】:How can I extract a specific range of hours from a dataframe in R如何从 R 中的数据框中提取特定范围的小时数
【发布时间】:2021-01-11 16:33:12
【问题描述】:

我在 R 中有一个包含 2 列(date_time、temp)的数据框,我想提取白天的所有温度(早上 5:59 到晚上 18:00 之间)。我首先用这段代码分隔日期和时间(小时):

Th$Hours <- format(as.POSIXct(Th$`date`,
"%Y-%m-%d %H:%M:%S", tz = ""),
format = "%H:%M")%>% as_tibble()

Th$Dates <- format(as.Date(Th$`date`,"%Y-%m-%d",
tz = ""), format = "%Y-%m-%d")%>% as_tibble()

然后我使用以下命令提取特定时间:

Th_day<- Th[Th$Hours >= " 06:00 AM" & Th$Hours<= "18:00 PM",]%>% as_tibble()

但是我得到了一个tibble,它给出了每天 00:00 到 18:00 的行:

有什么问题?

【问题讨论】:

  • 您可以发布示例数据吗?请使用dput(Th) 的输出编辑问题。或者,如果 dput(head(Th, 20)) 的输出太大。
  • 问题下方有一个选项。
  • 不,请把dput的输出发到the question

标签: r dataframe range extract hour


【解决方案1】:

不要将日期与时间分开。当您使用format 获取时间时,您将其转换为character 类,它不知道如何与&gt;&lt; 进行基于时间的比较。

相反,使用hour 将小时分量提取为整数,并对其进行比较:

library(lubridate)
Th %>% 
  mutate(DateTime <- as.POSIXct(date, "%Y-%m-%d %H:%M:%S", tz = "")) %>%
  filter(hour(DateTime) >= 6 & hour(DateTime ) < 18)

我正在对您的数据结构做出一些假设 - 如果您需要更多帮助,请编辑您的问题,按照评论者的要求与 dput() 分享一些示例数据。 dput(Th[1:5, ]) 应该足够了。

请注意,如果您只想对时间进行大量操作(忽略日期部分),您可以使用 chron 包中的 timessee here for some more info

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2017-02-19
    • 2022-10-06
    • 1970-01-01
    • 2023-04-04
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多