【问题标题】:How to increment a month in a row based on the month in the previous row?如何根据上一行的月份连续增加一个月?
【发布时间】:2019-01-04 08:56:17
【问题描述】:

我有一个数据框,它有一个值列和“月年”列。在第一行中,2018 年 8 月写入月份年份列。是否有可能在 value 列中具有值的以下行分别自动填充下个月?那么第二行是 2018 年 9 月,第三行是 2018 年 10 月,等等?

实际结果:

value  month
645    Aug 2018
589    NA
465    NA
523    NA
632    NA
984    NA

预期结果:

value  month
645    Aug 2018
589    Sep 2018
465    Okt 2018
523    Nov 2018
632    Dez 2018
984    Jan 2019

【问题讨论】:

    标签: r date increment


    【解决方案1】:

    在基础 R 中,您可以执行类似的操作来创建每月 sequence

    df$month <- format(seq(as.Date(paste("01", df$month[1]), "%d %b %Y"),
                                 length.out = nrow(df), by = "month"), "%b %Y")
    
    df
    #  value    month
    #1   645 Aug 2018
    #2   589 Sep 2018
    #3   465 Oct 2018
    #4   523 Nov 2018
    #5   632 Dec 2018
    #6   984 Jan 2019
    

    这里要注意的重要假设是您只有一个 month 值出现在第一行中,并且您希望通过从上一个条目增加 1 个月来替换月份的所有其他值。

    【讨论】:

    • 非常感谢!这正是我正在寻找的,你的假设在我的情况下得到了满足。
    【解决方案2】:

    我们可以使用来自zooas.yearmon 来做到这一点。使用的包版本1.8.3

    library(zoo)
    df$month <- head(as.yearmon(df$month[1]) + c(0, seq_len(nrow(df)))/12, -1)
    
    df
    #   value    month
    #1   645 Aug 2018
    #2   589 Sep 2018
    #3   465 Oct 2018
    #4   523 Nov 2018
    #5   632 Dec 2018
    #6   984 Jan 2019
    

    数据

    df <- structure(list(value = c(645L, 589L, 465L, 523L, 632L, 984L), 
    month = c("Aug 2018", NA, NA, NA, NA, NA)), class = "data.frame", 
     row.names = c(NA, -6L))
    

    【讨论】:

    • 我也尝试通过动物园来做,但也得到了 NA
    • 可能是受语言影响?用我的三个字母月份“八月”代替八月,它可以工作。
    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多