根据两列或更多列的值对数据帧进行子集

时间:2016-03-09 04:36:50

标签: r dataframe

我想根据我的要求对时间序列dataframe进行分类。 我有dataframe类似于下面提到的内容。

> df
Date         Year     Month    Day   Time      Parameter
2012-04-19   2012     04       19    7:00:00   26
2012-04-19   2012     04       19    7:00:00   20
.................................................
2012-05-01   2012     05       01    00:00:00  23
2012-05-01   2012     05       01    00:30:00  22
.................................................
2015-04-30   2015     04       30    23:30:00  20
.................................................
2015-05-01   2015     05       01    00:00:00  26

从类似的dataframe我想选择2012年5月1日2012-05-01到4月底2015-04-30的所有数据,无论开始日期和结束日期如何dataframe

但是,我熟悉grep函数来从一个特定列中选择数据。我一直在使用以下代码grepwith

# To select one particular year
> df.2012 <- df[grep("2012", df$Year),]
# To select two or more years at the same time
> df.sel.yr <- df[grep("201[2-5]", df$Year),]
# To select one particular month of a particular year. 
> df.Dec.2012 <- df[with(df, Year=="2012" & Month=="12"), ] 

通过几行命令,我将能够做到这一点。但如果只用几行或一行命令就可以节省大量时间。

任何帮助将不胜感激。先感谢您。

1 个答案:

答案 0 :(得分:1)

如果您的date列不属于date类,请先将其转换为一个,

df$Date <- as.Date(df$Date)

然后您可以按日期

对日期进行子集化
df[df$Date >= as.Date("2012-05-01") & df$Date <= as.Date("2015-04-30"), ]

#  Date       Year Month Day     Time     Parameter
#3 2012-05-01 2012     5   1   00:00:00        23
#4 2012-05-01 2012     5   1   00:30:00        22
#5 2015-04-30 2015     4  30   23:30:00        20