【问题标题】:How to add a year to the existing date list without erasing any of the existing ones如何在现有日期列表中添加一年而不删除任何现有日期
【发布时间】:2019-08-20 03:26:44
【问题描述】:

我有一个包含日期和速度的数据框,如下所示。我的问题是缺少一些年份,例如 1945 年和 1951 年。

我只想在 1944 到 1946 之间将 1945 添加到 Date 的位置上。我知道有些年份会重复。日期和月份不是很重要,因为它们更像是持仓者。我计划使所有增加的年份的速度等于 0(例如 mm-dd-1945)

我有什么

    Date         Velocity
    2/23/1944    1 
    12/26/1944   2
    1/7/1946     5
    3/25/1947    8
    4/14/1948    10
    6/18/1949    12
    1/31/1950    13
    12/7/1950    14 
    1/27/1952    15

我尝试了以下操作

    NewYear <- complete(Data,Date = seq.Date(min(Data$Date),
    max(Data$Date), by="year"))

但是所有现有的日期都被覆盖了,我最终得到了这个

    Date         Velocity
    2/23/1944    NA
    2/23/1945    NA
    2/23/1946    NA
    2/23/1947    NA
    2/23/1948    NA
    2/23/1949    NA
    2/23/1950    NA
    2/23/1951    NA
    2/23/1952    NA

期望的输出

    Date         Velocity
    2/23/1944    1 
    12/26/1944   2
    1/01/1945    0
    1/7/1946     5
    3/25/1947    8
    4/14/1948    10
    6/18/1949    12
    1/31/1950    13
    12/7/1950    14
    1/1/1951     0
    1/27/1952    15

【问题讨论】:

    标签: r


    【解决方案1】:

    我们首先需要从日期中提取年份,然后使用complete 来获取缺失的年份并将缺失的Date 替换为Year 的第一天。

    library(dplyr)
    
    df %>%
      mutate(Date = as.Date(Date, "%m/%d/%Y"), 
             Year = as.integer(format(Date, "%Y"))) %>%
      tidyr::complete(Year = seq(min(Year), max(Year)), fill = list(Velocity = 0)) %>%
      mutate(Date = if_else(is.na(Date), as.Date(paste0(Year, "-01-01")), Date))
    
    
    
    #    Year Date       Velocity
    #   <int> <date>        <dbl>
    # 1  1944 1944-02-23        1
    # 2  1944 1944-12-26        2
    # 3  1945 1945-01-01        0
    # 4  1946 1946-01-07        5
    # 5  1947 1947-03-25        8
    # 6  1948 1948-04-14       10
    # 7  1949 1949-06-18       12
    # 8  1950 1950-01-31       13
    # 9  1950 1950-12-07       14
    #10  1951 1951-01-01        0
    #11  1952 1952-01-27       15
    

    如果您不想在最终输出中添加 Year 列,请添加 select(-Year)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多