根据年份和月份对数据框进行子集化

时间:2018-11-13 01:05:09

标签: r

我想对2017年9月至2018年4月的数据框进行分组。我的数据框如下:-

Year    Month   Day    Avg_Temp
2017    8       31      20
2017    9       1       22
.
.
.
2018    4       30      26
2018    5        1      30

我希望我的数据集从2017年9月1日到2018年4月30日。

Year    Month   Day    Avg_Temp
2017    9       1       22
.
.
.
2018    4       30      26

仅基于我要做子集的年份。

df <-df[df$YEAR>="2017" & df$YEAR<="2018", ]

但是我也需要从月份中提取子集。任何帮助都很好

3 个答案:

答案 0 :(得分:1)

尝试此选项:

df <- df[(df$Year == 2017 & df$Month >= 9) |
         (df$Year == 2018 & df$Month <= 4), ]

顺便说一句,您可能需要考虑将日期存储为适当的日期类型,包括日期部分。

答案 1 :(得分:0)

如果将三个日期分量编码在一个Date列中,可能会更容易:

df$Date <- as.Date(paste(df$Year, df$Month, df$Date, sep = '-'))
df$Year <- NULL
df$Month <- NULL

df <- df[df$Date > as.Date('2017-09-01') & df$Date < as.Date('2018-04-01'), ]

答案 2 :(得分:0)

这是一种dplyr的方法:

 require(tidyverse)
   df<-data.frame(Year=c(2018,2017,2017,2017,2018,2018,2018),
               Month=c(9,8,10,4,9,3,4),Day=c(13,12,14,15,17,15,14))
df %>% 
  filter(Year==2017&Month>=9|Year==2018&Month<=4)

哪个产生:

       Year Month Day
1      2017     9  14
2      2018     3  15
3      2018     4  14