【问题标题】:How do I slice rows based in a global criteria?如何根据全局标准对行进行切片?
【发布时间】:2021-04-02 13:42:54
【问题描述】:

我正在努力根据全局标准对行进行切片。我有一个这样的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() 函数基于逐月方法(并创建按月分隔的新 dfs)来打破 df。所以,我要做的是确定月份从哪一行开始,在哪一行结束,然后我做这样的事情:

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

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

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

谁能帮帮我?

【问题讨论】:

  • 可能按month 分组,然后使用group_split()。使用正确的reproducible exampledput() 形式输入示例输入和可用于测试和验证可能解决方案的所需输出会更容易进行测试。
  • @MrFlick 我总是错过正确的模板。谢谢你引起我的注意。我将在下一次提交更多。我还在熟悉平台嘿嘿

标签: r dataframe slice rows


【解决方案1】:

一个选项是从zoo 转换为yearmon

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多