繁体   English   中英

在两个时间段之间细分数据帧

[英]Subset a dataframe between two time periods

如果我有一个示例数据框:

Date <- c("05/12/2012 05:17:00", "05/12/2012 06:10:00", "05/12/2012 06:12:00", "05/12/2012 06:14:00", 
      "06/12/2012 05:25:00", "06/12/2012 06:55:00", "06/12/2012 06:19:00", "06/12/2012 08:00:00",
      "07/12/2012 05:00:00", "07/12/2012 05:19:00", "07/12/2012 06:04:00",
      "07/12/2012 06:59:00")
Date <- strptime(Date, "%d/%m/%Y %H:%M")
a <- sample(12)
hour <- as.numeric(format(Date, "%H"))
min <- as.numeric(format(Date, "%M")) / 60
hours_mins <- hour + min

df1 <- data.frame(Date,a,hour, min, hours_mins, stringsAsFactors = FALSE)

我希望能够对我的数据框进行子集化,以便仅在05:15和06:15之间的时间(在任何一天)保留数据。

我将小时和分钟转换为十进制变量,并希望我可以执行以下操作:

df1[df1$hours_mins >= '5.25' & df1$hours_mins < '6.25']

...但是a,这行不通。 有没有人有什么建议?

删除引号并在最后添加逗号

df1[df1$hours_mins >= 5.25 & df1$hours_mins < 6.25,]

实际上,POSIXlt对象的优点之一是它自动携带关键日期信息。

Date1 <- strptime(c("05/12/2012 05:17:00", "05/12/2012 06:10:00", "05/12/2012 06:12:00", "05/12/2012 06:14:00", 
          "06/12/2012 05:25:00", "06/12/2012 06:55:00", "06/12/2012 06:19:00", "06/12/2012 08:00:00",
          "07/12/2012 05:00:00", "07/12/2012 05:19:00", "07/12/2012 06:04:00",
          "07/12/2012 06:59:00"), "%d/%m/%Y %H:%M")
class(Date1)
a <- sample(12)

#please note since strptime() is used Date1 contains "hour", "min" etc
df1 <- data.frame(Date1, hr=Date1$hour, min=Date1$min, cum_hrs=Date1$min/60+Date1$hour, a, stringsAsFactors = FALSE)
df1[(df1$hr + df1$min/60>= 5.25) & (df1$hr + df1$min/60< 6.25),]

另外,如果您想要总小时数(以小数表示),则在数据框中添加一列。 希望这能满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM