R语言 筛选设置时间段之间的工作日,从CSV转换时间时出现问题(YYYY-MM-DD HH:MM:SS)

zd287kbt  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(126)

有几篇文章和R转换时间戳,但我看不到找到任何解决这个问题的方法。我试图提取一个CSV文件中的环境数据集,我想了解什么是最大的CO2值只有工作日和0800至1700之间。CSV有以下格式:

timestamp,co2,humid,light,noise,pm25,score,temp(°C),voc
2022-10-03 23:15:00,899.0,55.2,349.2,51.3,22.0,80.0,22.9,646.0
2022-10-03 23:20:00,903.2,55.2,329.0,50.7,21.3,81.4,22.9,460.5
2022-10-03 23:25:00,910.8,54.8,347.6,51.6,21.6,81.1,23.1,513.4
2022-10-03 23:30:00,917.4,54.4,430.9,53.7,21.7,80.7,23.3,571.4

代码加载CSV并可以查看DF。日期提取工作正常,但时间提取仅提供N/A。我尝试过不同的解决方案,我可以提取小时、分钟、秒,这些都包含在DF中(请参见屏幕截图)。
我无法解决的问题是,是否有能力从时间戳中提取时间,或者是否需要重新加入各个小时、分钟、秒才能进行比较。问题是,我无法获得正确的时间格式,因为它需要采用HH:MM:SS格式。

library(lubridate)

library(dplyr)

# read in CSV file, limited to the first 50 rows
df <- read.csv("data.csv",nrows=50)

# convert "date" column to a date object
df$timestamp <- ymd_hms(df$timestamp)
View(df$timestamp)
# Extract the date 
df$date <- date(df$timestamp)
# Extract the time, !! but this does work and obtaining n/a
df$time <- parse_date_time(df$timestamp, '%H:%M:%S')
df$hour<- hour(df$timestamp)
df$minute<- minute(df$timestamp)
df$second<- second(df$timestamp)

df <- df %>% 
filter(!is.weekend(date) & time >= hms("08:00:00") & time <= hms("17:00:00"))

df <- df %>% 
group_by(date) %>% 
summarize(min = min(value), max = max(value))

 df

DF,df$time中包含的数据始终为n/a,小时、分钟、秒被提取,但包含在单独的df单元格中。

cetgtptt

cetgtptt1#

您可以直接在timestamp上使用lubridate函数,而无需进行所有额外的转换。

library(dplyr)
library(lubridate)

df %>% 
  filter(wday(timestamp) %in% 2:6 & hour(timestamp) >= 8 & hour(timestamp) <= 17) %>% 
  group_by(date = as.Date(timestamp)) %>% 
  summarize(min = min(co2), max = max(co2))

(With您的示例数据,这将导致空 Dataframe ,因为您提供的所有时间都晚于17:00。)

相关问题