【问题标题】:Test Weekday then Add Number to Date in R测试工作日然后在 R 中将数字添加到日期
【发布时间】:2015-12-30 23:10:25
【问题描述】:

我有一个包含日期的列 (df$Date),我想创建一个新列 (df$NewColumn),根据星期几(使用 Lubridate 的 wday)添加可变天数在 df$Date 中,例如:

df$NewColumn <- ifelse(wday(df$Date) == 6, df$Date + 3,
                       ifelse(wday(df$Date) == 7, df$Date + 3,
                              df$Date + 2))

它似乎可以正常工作,唯一的问题是我的日期格式是 16XXX 格式,我似乎无法将其转换回看起来合适的日期。感谢您的帮助!

【问题讨论】:

  • 你能给一个你约会的样本吗?我不确定 16XXXX 格式是什么。
  • 要了解ifelse 更改格式的原因,请参阅?ifelse 中的警告部分。
  • 一个例子是公式采用“2015-10-05”并且(我相信)加 2 等于 16716。
  • Microsoft 复制的 Lotus123 日期代码中存在错误,该代码创建的日期相差 2,偏移距 1899 年 12 月 31 日。那么也许这个数字来自 Excel?

标签: r


【解决方案1】:

解决这个问题的一种方法是使用class() 函数:

R> testdate <- 16716
R> class(testdate) <- "Date"
R> testdate
[1] "2015-10-08"

【讨论】:

  • 修复成功!知道为什么它会“破坏”(即改变格式)吗?很想了解我自己的学习。
  • 不确定,自从我开始使用 R 以来,我刚刚学会了忍受这些东西。如果其他人发表更深入的解释,我会很高兴阅读。
  • @stevenjoe ; ifelse 对返回的对象的类做了一些奇怪的事情。您需要恢复具有日期等属性的对象类是很常见的。
  • 感谢大家的帮助!
【解决方案2】:

如 cmets 中所述,ifelse 更改格式。如果您可以避免使用它,那么格式应该保持不变。以下代码创建您正在寻找的输出:

library(lubridate)

df <- data.frame(Date=as.Date(c("2011/01/01",
                                "2011/01/02")))

df$NewColumn <- df$Date + 2 + as.numeric(wday(df$Date)>=6)

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2012-05-06
    相关资源
    最近更新 更多