简体   繁体   中英

Subsetting a dataframe based on the values of two or more columns

I would like to subset a timeseries dataframe based on my requirement. I have a dataframe something similar to the one mentioned below.

> 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

From the dataframe similar to this I will like to select all the data from the first of May 2012 2012-05-01 to the end of April 2015-04-30 , regardless of the starting and end date of the dataframe .

However, I am familiar with the grep function to select the data from one particular column. I have been using the following code with grep and with .

# 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"), ] 

With several Lines of commands i will be able to do it. But it would save a lot of time if I can do it with only few or one line of command.

Any help will be appreciated. Thank you in advance.

If your date column is not of class date first convert it to one by,

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

and then you can subset the date by,

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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