R - 从数据帧中的某个日期或时间段提取数据

时间:2014-11-29 19:20:59

标签: r

我是R的新手,我有一个这样的数据框:

     EndDate EndId EndTime
1 02/01/2013   251   13:32
2 03/01/2013   251   17:19
3 04/01/2013   251   16:26
4 04/01/2013   368   08:36
5 05/01/2013   386   16:58
6 01/01/2013   329   11:51

如何选择介于03/01/2013和05/01/2013之间的数据帧行? (或者在一段时间内?)谢谢

2 个答案:

答案 0 :(得分:5)

我倾向于将其转换为xts(可扩展时间序列)对象,并对其使用时间序列索引。

library(xts)
df.xts <-xts(df["EndId"],order.by=as.POSIXct(paste(df$EndDate,df$EndTime),format="%m/%d/%Y %H:%M"))

df.xts["2013-03-01::2013-05-01"]
#                     EndId
# 2013-03-01 17:19:00   251
# 2013-04-01 08:36:00   368
# 2013-04-01 16:26:00   251
# 2013-05-01 16:58:00   386

答案 1 :(得分:2)

首先,请不要使用含糊不清的日期格式。你的所有6个日期字符串都不明确;它们可以是dd / mm / yyyy或mm / dd / yyyy。如果您可以控制输入数据的生成,请以yyyy-mm-dd(ISO 8601)格式生成。看到含糊不清的日期格式让我的眼睛受伤。

此外,R还有一个内置日期类,非常适合您的目的。您的EndDate列不是日期类型,这是可以辨别的,因为R始终以ISO 8601格式打印日期。您可以直接将列转换为日期类型:

df$EndDate <- as.Date(df$EndDate, '%m/%d/%Y' );

(我假设mm / dd / yyyy格式。)

然后,您可以使用矢量化比较,逻辑和索引操作来提取符合条件的data.frame子集:

df[df$EndDate>=as.Date('2013-03-01') & df$EndDate<=as.Date('2013-05-01'),];