to subset a dataframe based on year and month










0














I want to subset my dataframe from Sept 2017 to April 2018. My dataframe is like this:-



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


I want that my dataset from 1 Sept 2017 to 30 April 2018.



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


based on just the year I am to do subset.



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


But I need to subset from month as well. Any help would be great










share|improve this question




























    0














    I want to subset my dataframe from Sept 2017 to April 2018. My dataframe is like this:-



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


    I want that my dataset from 1 Sept 2017 to 30 April 2018.



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


    based on just the year I am to do subset.



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


    But I need to subset from month as well. Any help would be great










    share|improve this question


























      0












      0








      0







      I want to subset my dataframe from Sept 2017 to April 2018. My dataframe is like this:-



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


      I want that my dataset from 1 Sept 2017 to 30 April 2018.



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


      based on just the year I am to do subset.



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


      But I need to subset from month as well. Any help would be great










      share|improve this question















      I want to subset my dataframe from Sept 2017 to April 2018. My dataframe is like this:-



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


      I want that my dataset from 1 Sept 2017 to 30 April 2018.



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


      based on just the year I am to do subset.



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


      But I need to subset from month as well. Any help would be great







      r






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 1:06









      Marius

      31.3k97174




      31.3k97174










      asked Nov 13 '18 at 1:05









      supriya singhsupriya singh

      234




      234






















          3 Answers
          3






          active

          oldest

          votes


















          0














          Here is a dplyr approach:



           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)


          Which Yields this:



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





          share|improve this answer






















          • Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
            – supriya singh
            Nov 13 '18 at 1:24










          • I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
            – NelsonGon
            Nov 13 '18 at 1:44











          • Thanks a lot. It worked :-)
            – supriya singh
            Nov 13 '18 at 15:06


















          1














          Try this option:



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


          By the way, you might want to consider storing your dates as a proper date type, including a day component.






          share|improve this answer






















          • I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
            – supriya singh
            Nov 13 '18 at 1:37










          • @supriyasingh Sorry, I had a typo in there. It works now.
            – Tim Biegeleisen
            Nov 13 '18 at 1:48


















          0














          Perhaps it would be easier if the three date components were encoded in one Date column :



          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'), ]





          share|improve this answer
















          • 1




            I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
            – supriya singh
            Nov 13 '18 at 1:35










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272298%2fto-subset-a-dataframe-based-on-year-and-month%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          3 Answers
          3






          active

          oldest

          votes








          3 Answers
          3






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          Here is a dplyr approach:



           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)


          Which Yields this:



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





          share|improve this answer






















          • Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
            – supriya singh
            Nov 13 '18 at 1:24










          • I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
            – NelsonGon
            Nov 13 '18 at 1:44











          • Thanks a lot. It worked :-)
            – supriya singh
            Nov 13 '18 at 15:06















          0














          Here is a dplyr approach:



           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)


          Which Yields this:



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





          share|improve this answer






















          • Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
            – supriya singh
            Nov 13 '18 at 1:24










          • I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
            – NelsonGon
            Nov 13 '18 at 1:44











          • Thanks a lot. It worked :-)
            – supriya singh
            Nov 13 '18 at 15:06













          0












          0








          0






          Here is a dplyr approach:



           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)


          Which Yields this:



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





          share|improve this answer














          Here is a dplyr approach:



           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)


          Which Yields this:



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






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 13 '18 at 1:43

























          answered Nov 13 '18 at 1:12









          NelsonGonNelsonGon

          905319




          905319











          • Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
            – supriya singh
            Nov 13 '18 at 1:24










          • I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
            – NelsonGon
            Nov 13 '18 at 1:44











          • Thanks a lot. It worked :-)
            – supriya singh
            Nov 13 '18 at 15:06
















          • Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
            – supriya singh
            Nov 13 '18 at 1:24










          • I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
            – NelsonGon
            Nov 13 '18 at 1:44











          • Thanks a lot. It worked :-)
            – supriya singh
            Nov 13 '18 at 15:06















          Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
          – supriya singh
          Nov 13 '18 at 1:24




          Thank you for the response. Using this:- RawWeatherBoston %>% filter(YEAR==2017&MONTH%in%c(4:7)), I am able to get data from April 2017 to July 2017. I want to get data from Sept 2017 to April 2018.
          – supriya singh
          Nov 13 '18 at 1:24












          I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
          – NelsonGon
          Nov 13 '18 at 1:44





          I've updated my answer. See if that works for you. I for some reason took Sept to be 7, my bad!
          – NelsonGon
          Nov 13 '18 at 1:44













          Thanks a lot. It worked :-)
          – supriya singh
          Nov 13 '18 at 15:06




          Thanks a lot. It worked :-)
          – supriya singh
          Nov 13 '18 at 15:06













          1














          Try this option:



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


          By the way, you might want to consider storing your dates as a proper date type, including a day component.






          share|improve this answer






















          • I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
            – supriya singh
            Nov 13 '18 at 1:37










          • @supriyasingh Sorry, I had a typo in there. It works now.
            – Tim Biegeleisen
            Nov 13 '18 at 1:48















          1














          Try this option:



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


          By the way, you might want to consider storing your dates as a proper date type, including a day component.






          share|improve this answer






















          • I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
            – supriya singh
            Nov 13 '18 at 1:37










          • @supriyasingh Sorry, I had a typo in there. It works now.
            – Tim Biegeleisen
            Nov 13 '18 at 1:48













          1












          1








          1






          Try this option:



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


          By the way, you might want to consider storing your dates as a proper date type, including a day component.






          share|improve this answer














          Try this option:



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


          By the way, you might want to consider storing your dates as a proper date type, including a day component.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 13 '18 at 1:48

























          answered Nov 13 '18 at 1:09









          Tim BiegeleisenTim Biegeleisen

          219k1388140




          219k1388140











          • I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
            – supriya singh
            Nov 13 '18 at 1:37










          • @supriyasingh Sorry, I had a typo in there. It works now.
            – Tim Biegeleisen
            Nov 13 '18 at 1:48
















          • I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
            – supriya singh
            Nov 13 '18 at 1:37










          • @supriyasingh Sorry, I had a typo in there. It works now.
            – Tim Biegeleisen
            Nov 13 '18 at 1:48















          I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
          – supriya singh
          Nov 13 '18 at 1:37




          I tried this but this isn't working. It is not filtering anything. Also the data type of Year is changing to Logical(YEAR : logi TRUE TRUE TRUE TRUE TRUE TRUE)
          – supriya singh
          Nov 13 '18 at 1:37












          @supriyasingh Sorry, I had a typo in there. It works now.
          – Tim Biegeleisen
          Nov 13 '18 at 1:48




          @supriyasingh Sorry, I had a typo in there. It works now.
          – Tim Biegeleisen
          Nov 13 '18 at 1:48











          0














          Perhaps it would be easier if the three date components were encoded in one Date column :



          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'), ]





          share|improve this answer
















          • 1




            I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
            – supriya singh
            Nov 13 '18 at 1:35















          0














          Perhaps it would be easier if the three date components were encoded in one Date column :



          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'), ]





          share|improve this answer
















          • 1




            I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
            – supriya singh
            Nov 13 '18 at 1:35













          0












          0








          0






          Perhaps it would be easier if the three date components were encoded in one Date column :



          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'), ]





          share|improve this answer












          Perhaps it would be easier if the three date components were encoded in one Date column :



          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'), ]






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 '18 at 1:10









          12b345b6b7812b345b6b78

          767115




          767115







          • 1




            I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
            – supriya singh
            Nov 13 '18 at 1:35












          • 1




            I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
            – supriya singh
            Nov 13 '18 at 1:35







          1




          1




          I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
          – supriya singh
          Nov 13 '18 at 1:35




          I don't want to combine all three columns. I need 3 separate columns for Year, Month and Day
          – supriya singh
          Nov 13 '18 at 1:35

















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272298%2fto-subset-a-dataframe-based-on-year-and-month%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          這個網誌中的熱門文章

          Barbados

          How to read a connectionString WITH PROVIDER in .NET Core?

          Node.js Script on GitHub Pages or Amazon S3