有几篇文章和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单元格中。
1条答案
按热度按时间cetgtptt1#
您可以直接在
timestamp
上使用lubridate函数,而无需进行所有额外的转换。(With您的示例数据,这将导致空 Dataframe ,因为您提供的所有时间都晚于17:00。)