使用回滚和lubridate获取NA值
下面的使用回滚和lubridate获取NA值,r,lubridate,R,Lubridate,下面的mutate函数哪里出了问题 我想将日期回滚到月底,但对于某些月份,它只返回NA值 date date2 1 2014-01-31 <NA> 2 2014-02-28 2014-02-28 3 2014-03-31 <NA> 4 2014-04-30 2014-04-30 5 2014-05-30 2014-05-31 6 2014-06-30 2014-06-30 7 2014-07
mutate
函数哪里出了问题
我想将日期回滚到月底,但对于某些月份,它只返回NA值
date date2
1 2014-01-31 <NA>
2 2014-02-28 2014-02-28
3 2014-03-31 <NA>
4 2014-04-30 2014-04-30
5 2014-05-30 2014-05-31
6 2014-06-30 2014-06-30
7 2014-07-31 2014-07-31
8 2014-08-29 2014-08-31
9 2014-09-30 2014-09-30
10 2014-10-31 <NA>
数据:
mydates您需要使用%m++
而不是++
mydates %>%
mutate(date2 = rollback(parse_date(date, "%Y-%m-%d") %m+% months(1)))
# date date2
# 1 2014-01-31 2014-01-31
# 2 2014-02-28 2014-02-28
# 3 2014-03-31 2014-03-31
# 4 2014-04-30 2014-04-30
# 5 2014-05-30 2014-05-31
# 6 2014-06-30 2014-06-30
# 7 2014-07-31 2014-07-31
# 8 2014-08-29 2014-08-31
# 9 2014-09-30 2014-09-30
# 10 2014-10-31 2014-10-31
help('%m+%')
添加月份会阻碍基本算法,因为连续的月份
有不同的长度。与其他元素一起,它有助于
执行自动翻滚的算法。例如,12:00:00+61
秒变成12:01:01。然而,人们往往更喜欢这样
行为不会在几个月内发生。例如,我们有时想要一月
31+1个月=2月28日,而不是3月3日m+%执行这种类型的操作
算术。日期%m+%months(n)始终返回第n个月的日期
在日期之后。如果新日期通常会溢出到n+1
月份,%m+%将返回第n个月的最后一天(回滚()。
日期%m-%months(n)始终返回前n个月的日期
日期
您需要使用%m++
而不是++
mydates %>%
mutate(date2 = rollback(parse_date(date, "%Y-%m-%d") %m+% months(1)))
# date date2
# 1 2014-01-31 2014-01-31
# 2 2014-02-28 2014-02-28
# 3 2014-03-31 2014-03-31
# 4 2014-04-30 2014-04-30
# 5 2014-05-30 2014-05-31
# 6 2014-06-30 2014-06-30
# 7 2014-07-31 2014-07-31
# 8 2014-08-29 2014-08-31
# 9 2014-09-30 2014-09-30
# 10 2014-10-31 2014-10-31
help('%m+%')
添加月份会阻碍基本算法,因为连续的月份
有不同的长度。与其他元素一起,它有助于
执行自动翻滚的算法。例如,12:00:00+61
秒变成12:01:01。然而,人们往往更喜欢这样
行为不会在几个月内发生。例如,我们有时想要一月
31+1个月=2月28日,而不是3月3日m+%执行这种类型的操作
算术。日期%m+%months(n)始终返回第n个月的日期
在日期之后。如果新日期通常会溢出到n+1
月份,%m+%将返回第n个月的最后一天(回滚()。
日期%m-%months(n)始终返回前n个月的日期
日期
您的问题在于+月份(1)
,因此当您尝试将其添加到(比如)“2005-03-31”
时,您可能会认为您可能会得到“2005-04-31”
,它不是日期,并且不清楚您是否想要“2005-04-30”
或“2005-05-01”
,因此NA
可能更安全。请注意,将月份添加到7月31日或12月31日不会出现此问题。或者你可以考虑Azhashla删除的帖子,改变BrkeTySyt问题是用<代码> +月(1)< /代码>,所以当你尝试添加到(例如)代码>“2005—03-31”< /C> >你可能会认为你可能得到<代码>“2005—04-31”这不是一个日期,也不清楚你是否想要“代码>”2005—04-30“或<代码>”2005—05-01。
因此NA
可能更安全。请注意,将月份添加到7月31日或12月31日不会出现此问题。或者你可以考虑Azhashla删除的帖子并更改括号
mydates %>%
mutate(date2 = rollback(parse_date(date, "%Y-%m-%d") %m+% months(1)))
# date date2
# 1 2014-01-31 2014-01-31
# 2 2014-02-28 2014-02-28
# 3 2014-03-31 2014-03-31
# 4 2014-04-30 2014-04-30
# 5 2014-05-30 2014-05-31
# 6 2014-06-30 2014-06-30
# 7 2014-07-31 2014-07-31
# 8 2014-08-29 2014-08-31
# 9 2014-09-30 2014-09-30
# 10 2014-10-31 2014-10-31
help('%m+%')