【问题标题】:how to use group_by in r to solve my problem. is there any other soln?如何在 r 中使用 group_by 来解决我的问题。还有其他解决方案吗?
【发布时间】:2020-05-26 15:31:41
【问题描述】:

数据在数据帧中看起来像这样

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/7/2019      1500           6             50
1/1/2019   1/7/2019      1600           6             25
1/1/2019   1/7/2019      1700           6             20
1/1/2019   1/14/2019      1500          13            75
1/1/2019   1/14/2019      1600          13            50
1/1/2019   1/14/2019      1700          13            35
1/1/2019   1/14/2019      1800          13            25
1/1/2019   1/14/2019      1900          13            15
1/1/2019   1/21/2019      1500          20            100
1/1/2019   1/21/2019      1600          20            70
1/1/2019   1/28/2019      1500          27            130
1/1/2019   1/28/2019      1600          27            85
1/1/2019   1/28/2019      1700          27            70
1/2/2019   1/7/2019      1500           5             40
1/2/2019   1/7/2019      1600           5             16
1/2/2019   1/7/2019      1700           5             10
1/2/2019   1/14/2019     1500           12            50
1/2/2019   1/14/2019     1600           12            50
1/2/2019   1/14/2019     1700           12            50
1/2/2019   1/21/2019     1500           19            75
1/2/2019   1/21/2019     1600           19            60
1/2/2019   1/21/2019     1700           19            40
1/2/2019   1/282019      1500           26            50

对于每个日期,都有不同的有效期数据。 我希望 dATA 以这样一种方式排列,即对于每个日期,最低 dte 行进入一个数据帧。这样我将拥有一个包含该日期最低 dte 的所有日期的数据框。 然后我想要另一个数据框,它将包含所有日期的数据,第二低 dte 和第三低 dte 是数据框

输出sud看起来像这样

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/7/2019      1500           6             50
1/1/2019   1/7/2019      1600           6             25
1/1/2019   1/7/2019      1700           6             20
1/2/2019   1/7/2019      1500           5             40
1/2/2019   1/7/2019      1600           5             16
1/2/2019   1/7/2019      1700           5             10

另一个输出数据帧

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/14/2019      1500          13            75
1/1/2019   1/14/2019      1600          13            50
1/1/2019   1/14/2019      1700          13            35
1/1/2019   1/14/2019      1800          13            25
1/1/2019   1/14/2019      1900          13            15
1/2/2019   1/14/2019      1500          12            50
1/2/2019   1/14/2019      1600          12            50
1/2/2019   1/14/2019      1700          12            50

第三个数据帧输出

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/21/2019      1500          20            100
1/1/2019   1/21/2019      1600          20            70
1/2/2019   1/21/2019      1500          19            75
1/2/2019   1/21/2019      1600          19            60
1/2/2019   1/21/2019      1700          19            40

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您必须按DATE 分组并找到daystoexpiry 的最小值。使用包dplyr 给你

    # minimum
    df %>%
      group_by(DATE) %>%
      filter(daystoexpiry == min(daystoexpiry))
    
    # second lowest
    df %>%
      group_by(DATE) %>%
      filter(daystoexpiry == sort(unique(daystoexpiry))[2])
    
    # third lowest
    df %>%
      group_by(DATE) %>%
      filter(daystoexpiry == sort(unique(daystoexpiry))[3])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2012-10-05
      相关资源
      最近更新 更多