我是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之间的数据帧行? (或者在一段时间内?)谢谢
答案 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'),];