R一年到十年

时间:2016-02-12 00:48:42

标签: r date lubridate

我想将最近几十年的日期记录下来,例如:

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来进行分组?

4 个答案:

答案 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