【问题标题】:Create a sequence of dates and store in a data frame with a column name创建日期序列并使用列名存储在数据框中
【发布时间】:2021-04-30 09:36:57
【问题描述】:

我觉得我快疯了!

我需要创建一个带有列名的日期数据框,但我很难弄清楚。

我知道我可以使用 colnames(date_df) <- "DATE" 在 dplyr 链之外分配 colnames,但为了我自己的学习,我想了解是否可以在 dplyr 管道/链中进行操作

library(tidyverse)
library(lubridate)

    date_df <- seq.Date(from = as.Date(today()- days(7)),
                        to = as.Date(today()),
                        by = "day") %>% 
      as.data.frame(col.names = c("DATE"))

谁能帮我摆脱困境并帮我为这个基本问题添加一个列名?

【问题讨论】:

  • 也许很简单:data.frame(DATE = seq.Date(from = as.Date(today()- days(7)), to = as.Date(today()), by = "day"))
  • @zx8754 谢谢,有时我觉得我对 R 的熟悉程度在倒退。我觉得自己像个笨蛋。
  • 作为答案发布,有时我们把事情复杂化了,回到基础:)

标签: r date dplyr sequence


【解决方案1】:

有很多方法可以做到这一点,因为您使用了 data.frame :

library(lubridate)
library(magrittr)

seq.Date(from = as.Date(today()- days(7)),
        to = as.Date(today()),
        by = "day")  %>%
  data.frame(DATE = .)

#        DATE
#1 2021-04-23
#2 2021-04-24
#3 2021-04-25
#4 2021-04-26
#5 2021-04-27
#6 2021-04-28
#7 2021-04-29
#8 2021-04-30

【讨论】:

  • 为什么直接调用seq.Date而不是通过seq
  • 我只是从 OP 的尝试中复制了它。虽然很好奇这样做有什么缺点?
  • @KonradRudolph 可能(像我自己一样)复制粘贴了 OP 的代码,这与问题无关,但是是的,seq 也可以正常工作。
  • @Ronak 啊,没注意到。主要缺点是它的代码更多,并且添加的代码是无关紧要的:它不提供任何信息性细节。此外,它使代码非泛型;但是当然,这对这个特定的代码没有任何影响(但它使得稍后重构为可重用的模块会稍微困难一些)。尽管如此,我发现保持代码尽可能通用是一个很好的经验法则。这通常会导致更简洁的算法并大大提高可重用性(因此,重用性)。
【解决方案2】:

也许很简单:

data.frame(DATE = seq.Date(from = as.Date(today() - days(7)), 
                           to = as.Date(today()),
                           by = "day"))

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多