【问题标题】:Subset dataframe using date/time factor variable使用日期/时间因子变量的子集数据框
【发布时间】:2018-04-04 13:39:20
【问题描述】:

我希望这是一个重复的问题,但我已经花了很多时间试图找到解决方案,并且非常感谢您的帮助。

我在数据框中有一个变量timestamp,当前存储为一个因子。 timestamp 是日期和时间,格式为 dd/mm/yyyy hh:mm:ss:ssssss

我希望能够使用时间戳变量对数据帧进行子集化,例如 09/10/2017 00:02:00 和 09/10/2017 00:06:00 之间的所有行。

我尝试转换为有序因子,并尝试转换为 POSIXlt 以帮助进行子集化,但没有成功。

提前感谢您的帮助

df <- data.frame(timestamp=c("09/10/2017 00:00:00:000000", "09/10/2017 00:01:00:000000", "09/10/2017 00:02:00:000000", 
                 "09/10/2017 00:03:00:000000", "09/10/2017 00:04:00:000000", "09/10/2017 00:05:00:000000",
                 "09/10/2017 00:06:00:000000", "09/10/2017 00:07:00:000000", "09/10/2017 00:08:00:000000", 
                 "09/10/2017 00:09:00:000000", "09/10/2017 00:10:00:000000", "09/10/2017 00:00:00:000000", 
                 "09/10/2017 00:01:00:000000", "09/10/2017 00:02:00:000000", "09/10/2017 00:03:00:000000", 
                 "09/10/2017 00:04:00:000000", "09/10/2017 00:05:00:000000", "09/10/2017 00:06:00:000000", 
                 "09/10/2017 00:07:00:000000", "09/10/2017 00:08:00:000000", "09/10/2017 00:09:00:000000", 
                 "09/10/2017 00:10:00:000000"), b=c (1:22))

【问题讨论】:

标签: r datetime subset


【解决方案1】:

这是使用lubridate的解决方案

require(lubridate);

# Convert timestamps to POSIXct time&date
df$timestamp <- dmy_hms(gsub(":000000", "", df$timestamp));

# These are your query start/stop dates&times
start <- "09/10/2017 00:02:00";
stop <- "09/10/2017 00:06:00";
interval <- interval(dmy_hms(start), dmy_hms(stop));

# Return entries that fall within query interval
df[df$timestamp %within% interval, ];
#        timestamp  b
#3  2017-10-09 00:02:00  3
#4  2017-10-09 00:03:00  4
#5  2017-10-09 00:04:00  5
#6  2017-10-09 00:05:00  6
#7  2017-10-09 00:06:00  7
#14 2017-10-09 00:02:00 14
#15 2017-10-09 00:03:00 15
#16 2017-10-09 00:04:00 16
#17 2017-10-09 00:05:00 17
#18 2017-10-09 00:06:00 18

或者使用subset(df, timestamp %within% interval) 给出相同的结果。最好将其包装在一个函数中以供更通用的使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2019-09-17
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多