2016-02-12 7 views
13

で十年の年:私は、私はLubridateでこれを行うことができます願っていたフロア私は例えば、最寄りの十年に床の日付のセットをしたいと思いR

1922 --> 1920, 
2099 --> 2090, 

など

以下のように:

floor_date(1922, 'decade') 

しかし、私は得る:

Error in match.arg(unit) : 
    'arg' should be one of “second”, “minute”, “hour”, “day”, “week”, “month”, “year” 

これをうまくやって、ビンニングを行うためのif-else文を避け、おそらくグループ化を行うcutの束を避けるための方法はありますか?

答えて

2

フロアRで年最寄りの十年に:道としてモジュラスの

と思うあなたはlubridateを使いたいならば、それはこのような何かを行うことができます右端の桁を抽出して元の年から差し引くことができます。 - 1998 = 1990

> 1992 - 1992 %% 10 
[1] 1990 
> 1998 - 1998 %% 10 
[1] 1990 

天井の最寄りの十年にRで年間8:

天井がちょうど床に似ているが、Rで年間を通して10

> 1998 - (1998 %% 10) + 10 
[1] 2000 
> 1992 - (1992 %% 10) + 10 
[1] 2000 

を追加

整数部は、整数を20に丸めたものを1998から199.8に変換します。 0を乗算して2000に戻す。

> round(1992/10) * 10 
[1] 1990 
> round(1998/10) * 10 
[1] 2000 
17

ここでは整数除算を使用できます。各番号に何十年も入る数を見てください。

(c(1922, 2099) %/% 10) * 10 
# [1] 1920 2090 
+10

または同様に 'x - (x %% 10)'。 – thelatemail

0

整数にはfloor_date()を使用できません。これは、日付オブジェクトまたは日時オブジェクトです。 MrFlickの答えで既に提案されているように、整数計算を行うために潤滑剤を使う必要はありません。


library(lubridate) 

y <- ymd(c("2016-01-01", "2009-12-31")) 
floor_date(y, years(10)) 
#> [1] "2010-01-01" "2000-01-01" 
+0

良い点。ありがとう。 –

関連する問題