我想将最近几十年的日期记录下来,例如:
1922 --> 1920,
2099 --> 2090,
等。
我希望我能在Lubridate这样做,如:
floor_date(1922, 'decade')
但我明白了:
Error in match.arg(unit) :
'arg' should be one of “second”, “minute”, “hour”, “day”, “week”, “month”, “year”
有没有办法优雅地做到这一点,或许可以避免一堆if-else语句来进行分箱,并希望避免一堆cut
来进行分组?
答案 0 :(得分:17)
你可以在这里使用一些整数除法。只需看看每个数字进入几十年。
(c(1922, 2099) %/% 10) * 10
# [1] 1920 2090
答案 1 :(得分:11)
R年度最接近的十年:
将Modulus视为提取最右边数字并使用它从原始年份中减去的一种方法。 1998 - 8 = 1990
> 1992 - 1992 %% 10
[1] 1990
> 1998 - 1998 %% 10
[1] 1990
R中的一年最近十年:
天花板就像地板一样,但加10。
> 1998 - (1998 %% 10) + 10
[1] 2000
> 1992 - (1992 %% 10) + 10
[1] 2000
在R中度过一年到最近的十年:
整数除法将你的1998转换为199.8,舍入为整数为200,乘以10再回到2000。
> round(1992 / 10) * 10
[1] 1990
> round(1998 / 10) * 10
[1] 2000
floor_decade = function(value){ return(value - value %% 10) }
ceiling_decade = function(value){ return(floor_decade(value)+10) }
round_to_decade = function(value){ return(round(value / 10) * 10) }
print(floor_decade(1992))
print(floor_decade(1998))
print(ceiling_decade(1992))
print(ceiling_decade(1998))
print(round_to_decade(1992))
print(round_to_decade(1998))
打印:
# 1990
# 1990
# 2000
# 2000
# 1990
# 2000
来源: https://rextester.com/AZL32693
不要害怕使用这个dob的胶带,它是唯一能将这个单元组合在一起的东西。
答案 2 :(得分:2)
您不能将library(lubridate)
y <- ymd(c("2016-01-01", "2009-12-31"))
floor_date(y, years(10))
#> [1] "2010-01-01" "2000-01-01"
用于整数;它适用于日期或日期时间对象。正如MrFlick的回答中所建议的那样,你不需要使用lubridate进行整数计算。如果你想使用lubridate,可以这样做:
Fruit
apple;banana
pear;apple;peach
blueberry;durian;apple;peach
banana;grape;orange
.
答案 3 :(得分:1)
您还可以像这样使用发言权功能:
floor(1922 / 10) * 10
# [1] 1920
如果您需要四舍五入而不是倒地:
round(1922, digits = -1)
# [1] 1920