阻止地图将日期转换为数字

我有一个函数,可以查找给定日期的一周的第一天。在这个特殊的问题上,星期几确实从星期四开始。

该功能适用​​于各个日期。

week_commencing <- function(date) {
  weekday <- lubridate::wday(date)
  if (weekday >= 5) { 
    return(date - lubridate::days(weekday) + lubridate::days(5))
  } else {
    return(date - lubridate::days(weekday) - lubridate::days(2))
  } 
}

现在,我想将其与一起使用dplyr所以我修改了它以接受带有的列Map

week_commencing <- function(dates) {
  Map(function(date) {
    weekday <- lubridate::wday(date)
    if (weekday >= 5) { 
      return(date - lubridate::days(weekday) + lubridate::days(5))
    } else {
      return(date - lubridate::days(weekday) - lubridate::days(2))
    } 
  },dates)
}

我认为该功能有效,但同时也对日期应用了一些奇怪的强制措施,因为我最终使用的是数字日期。

> test <- data.frame(datetime=seq.Date(as.Date("2016-06-01"),as.Date("2016-06-10"), by='day'))
> test
     datetime
1  2016-06-01
2  2016-06-02
3  2016-06-03
4  2016-06-04
5  2016-06-05
6  2016-06-06
7  2016-06-07
8  2016-06-08
9  2016-06-09
10 2016-06-10

> test %>% mutate(datetime=week_commencing(datetime))
   datetime
1     16947
2     16954
3     16954
4     16954
5     16954
6     16954
7     16954
8     16954
9     16961
10    16961

关于如何以正常日期对象结束的任何想法?地图是否总是施加强制性?

康拉德·鲁道夫(Konrad Rudolph)

我不知道为什么将class属性放在这里(使用其他* apply函数时也会发生同样的情况)。—从根本上讲,问题似乎是unlist掉下了类:

> unlist(list(structure(1, class = 'foo')))
[1] 1

但是解决方法非常简单:将类设置在末尾。

此外,我建议不要使用Map(返回a list),而是使用vapply然后我们剩下:

week_commencing <- function(dates) {
  wc <- function(date) {
    weekday <- lubridate::wday(date)
    if (weekday >= 5) { 
      return(date - lubridate::days(weekday) + lubridate::days(5))
    } else {
      return(date - lubridate::days(weekday) - lubridate::days(2))
    } 
  }

  structure(vapply(dates, wc, numeric(1)), class = 'Date')
}

您也可以Vectorize在该函数上使用,但这也会删除该class属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

阻止地图将日期转换为数字

来自分类Dev

将数字转换为日期

来自分类Dev

将数字转换为日期

来自分类Dev

阻止excel将复制粘贴的数字/文本值转换为日期

来自分类Dev

Oracle将日期转换为数字

来自分类Dev

R将数字转换为日期的问题

来自分类Dev

Powershell将数字转换为日期并保存

来自分类Dev

将数字转换为R中的日期

来自分类Dev

readxl()将日期转换为数字

来自分类Dev

使用javascript将数字转换为日期

来自分类Dev

将数字日期转换为Datetime对象

来自分类Dev

将数字转换为日期问题

来自分类Dev

将数字日期转换为文本

来自分类Dev

如何阻止Javascript将日期转换为除法?

来自分类Dev

将SAS数字日期转换为日期时间格式

来自分类Dev

将字符串日期转换为数字日期

来自分类Dev

如何使用“-”将日期作为数字转换为日期

来自分类Dev

将整数字段日期时间转换为日期时间

来自分类Dev

如何防止R将日期向量强制转换为数字?

来自分类Dev

如何将数字转换为正常日期?

来自分类Dev

将数字sas日期转换为熊猫中的datetime

来自分类Dev

Excel VBA-停止将日期转换为数字

来自分类Dev

PostgreSQL将数字转换为日期和格式

来自分类Dev

禁用mapply自动将日期转换为数字

来自分类Dev

如何将mktime()转换为数字日期?

来自分类Dev

如何防止R将日期向量强制转换为数字?

来自分类Dev

将奇数日期格式转换为数字

来自分类Dev

禁用mapply自动将日期转换为数字

来自分类Dev

将数字日期转换为工作日