如何根据全局条件对行进行切片?

How do I slice rows based in a global criteria?

我正在努力根据全局标准对我的行进行切片。我有一个这样的 df:

         col1           col2            col3
 1. 2020-10-31 
 2. 2020-10-30 
 3. 2020-10-29 
 4. 2020-10-28
....
 43. 2020-9-30 
 44. 2020-9-29 
 45. 2020-9-28 
 46. 2020-9-27 

等等... 基本上,第一列的每一行都包含一个特定的日期 (y/m/d),并且该日期在减少。 我正在使用 slice() 函数根据逐月方法打破 df(并创建按月分隔的新 df)。所以,我所做的是确定月份在哪一行开始,在哪一行结束,然后我做这样的事情:

  dfnovember <- df %>%    
                  slice(1:46)

有了它,我得到了我需要的东西,但是很难(非常手动)。我想知道是否有不同的功能可以应用标准(逐月)并通过一次推杆获得所有标准。 像(伪函数):

dfgenericmonth <- df %>%    
               slice(month[day 31 to 01])

有人可以帮我吗?

您可以从 col1 中提取月份并在 split 中使用它来将数据拆分为数据框列表,每个月一个。

result <- split(df, format(as.Date(df$col1), '%Y-%m'))

一个选项是从 zoo

转换为 yearmon class
library(zoo)
library(dplyr)
out <- df %>%
    group_split(grp = as.yearmon(col1), .keep = FALSE)