R 为“设置单独的变量”;“第一”;月份';s观察

R 为“设置单独的变量”;“第一”;月份';s观察,r,dplyr,R,Dplyr,我想征求您的指导意见,为“第一个”月的观察值制定单独的变量(列) 具体而言,通过“第一”,它包括: 各组的年度第一次观察值 小组对整个观察的第一次观察 示例数据如下所示: structure(list(Group = c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3), Time = structure(c(4L, 5L, 6L, 2L, 3L, 8L, 9L, 10L, 1L, 7L), .Label = c("2013-02-28", "2014

我想征求您的指导意见,为“第一个”月的观察值制定单独的变量(列)

具体而言,通过“第一”,它包括:

  • 各组的年度第一次观察值
  • 小组对整个观察的第一次观察
  • 示例数据如下所示:

    structure(list(Group = c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3), Time = structure(c(4L, 
    5L, 6L, 2L, 3L, 8L, 9L, 10L, 1L, 7L), .Label = c("2013-02-28", 
    "2014-01-31", "2014-02-28", "2014-04-30", "2014-05-31", "2014-06-30", 
    "2015-09-30", "2015-12-31", "2016-03-31", "2017-01-31"), class = "factor"), 
        Value = c(0.1, 0.2, 0.3, 0.5, 0.7, 0.2, 0.3, 0.4, 0.4, 0.5
        ), Firstobsoftheeyear = c(0.1, 0.1, 0.1, 0.5, 0.5, 0.2, 0.3, 
        0.4, 0.4, 0.5), Firstobs = c(0.1, 0.1, 0.1, 0.5, 0.5, 0.5, 
        0.5, 0.5, 0.4, 0.4)), class = "data.frame", row.names = c(NA, 
    -10L), codepage = 65001L)
    
    最终的结果是:

    ╔═══════╦════════════╦═══════╦═════════════════════════════════════╦═════════════════════════════════╗
    ║ Group ║ Time       ║ Value ║ First-observation-of-the-year value ║ Group's first observation value ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 1     ║ 2014-04-30 ║ 0.1   ║ 0.1                                 ║ 0.1                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 1     ║ 2014-05-31 ║ 0.2   ║ 0.1                                 ║ 0.1                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 1     ║ 2014-06-30 ║ 0.3   ║ 0.1                                 ║ 0.1                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 2     ║ 2014-01-31 ║ 0.5   ║ 0.5                                 ║ 0.5                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 2     ║ 2014-02-28 ║ 0.7   ║ 0.5                                 ║ 0.5                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 2     ║ 2015-12-31 ║ 0.2   ║ 0.2                                 ║ 0.5                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 2     ║ 2016-03-31 ║ 0.3   ║ 0.3                                 ║ 0.5                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 2     ║ 2017-01-31 ║ 0.4   ║ 0.4                                 ║ 0.5                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 3     ║ 2013-02-28 ║ 0.4   ║ 0.4                                 ║ 0.4                             ║
    ╠═══════╬════════════╬═══════╬═════════════════════════════════════╬═════════════════════════════════╣
    ║ 3     ║ 2015-09-30 ║ 0.5   ║ 0.5                                 ║ 0.4                             ║
    ╚═══════╩════════════╩═══════╩═════════════════════════════════════╩═════════════════════════════════╝
    

    我们可以在
    列上创建一个分组,然后根据“组”和“年”获取
    第一个
    的“值”,然后将分组重置为仅“组”,并重新执行
    第一个
    以创建“组”的“第一个对象”

    library(dplyr)
    library(lubridate)
    df1 %>% 
        group_by(Group, Year = year(as.Date(Time))) %>%
        mutate(FirstObsoftheyear = first(Value)) %>%
        group_by(Group) %>% 
        mutate(FirstObs = first(Value))
    

    在base R中,您可以使用
    ave

    df$Time <- as.Date(df$Time)
    df$Firstobsoftheeyear <- with(df, ave(Value, Group, format(Time, '%Y'), 
                                      FUN = function(x) x[1]))
    df$Firstobs <- with(df, ave(Value, Group, FUN = function(x) x[1]))
    df
    
    #   Group       Time Value Firstobsoftheeyear Firstobs
    #1      1 2014-04-30   0.1                0.1      0.1
    #2      1 2014-05-31   0.2                0.1      0.1
    #3      1 2014-06-30   0.3                0.1      0.1
    #4      2 2014-01-31   0.5                0.5      0.5
    #5      2 2014-02-28   0.7                0.5      0.5
    #6      2 2015-12-31   0.2                0.2      0.5
    #7      2 2016-03-31   0.3                0.3      0.5
    #8      2 2017-01-31   0.4                0.4      0.5
    #9      3 2013-02-28   0.4                0.4      0.4
    #10     3 2015-09-30   0.5                0.5      0.4
    
    df$时间