【问题标题】:Add rows until today's date in R在 R 中添加直到今天日期的行
【发布时间】:2021-08-15 04:18:10
【问题描述】:

所以我有这种 R 数据框,只有一个 obs:

date company
2017-08-18 Apple

期望的输出

我想在今天之前添加行:

date company
2017-08-18 Apple
2017-08-19 Apple
2017-08-20 Apple
. .
. .
. .
2021-05-26 Apple

因此,每次启动代码时,都会以实际日期完成。可能吗 ?如果是的话,是否可以将其作为一个函数自动化,以便我只需几行代码就可以将其应用于我的所有数据集?

更新

当数据框中有多个日期时怎么做,比如:

date comapny
2021-05-24 AMZ
2021-05-25 AMZ

【问题讨论】:

    标签: r dataframe date


    【解决方案1】:

    我们可以通过在seq 中指定from、to 和by 来创建日期的sequence,并用data.frame 和从数据中提取的“公司”列进行包装(因为它已经被指定为单行 - 它被回收)

    date <- seq(as.Date(df1$date), Sys.Date(), by = '1 day')
    data.frame(date, company = df1$company)
    

    如果有不止一行,一个选项是使用rowwise

    library(dplyr)
    library(tidyr)
    df1 %>%
       mutate(date = as.Date(date)) %>%
       rowwise %>%
       mutate(date = list(seq(date, Sys.Date(), by = '1 day'))) %>%
       ungroup %>%
       unnest(date)
    

    或map

    library(purrr)
    df1 %>%
        mutate(date = map(as.Date(date), ~ seq(.x, Sys.Date(), by = '1 day'))) %>%
        unnest(date)  
    

    或者也可以使用complete

    df1 %>%
       group_by(company) %>%
       complete(date = seq(min(as.Date(date)), Sys.Date(), by = '1 day'))     
    

    【讨论】:

    • 对不起,我没有意识到这一点。我更新了我的问题,您可以看一下吗?
    • @theeconomista 我假设每个日期都扩展为今天的日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多