Kat R

2016-02-12 10 views
13

yılında on bir yıl, örneğin:Kat R

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

vb

ben Lubridate bunu umuyordum, gibi: Ama

floor_date(1922, 'decade') 

alıyorum:

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

Bunu incelikle yapmanın bir yolu var mıdır, belki de bin tane yapmak için bir if-else deyiminden kaçınmak ve gruplamayı yapmak için bir grup cut sinden kaçınmak mı istiyorsunuz?

cevap

2

Kat Yılda Ar yakın on: Bir yol olarak Modülünün

Think en sağdaki basamağı ayıklamak ve orijinal yıldan çıkarmak için kullanın. - 1998 = 1990

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

Tavan yakın on yıl için Ar bir yılı 8:

Tavan tam kat gibidir, ama R bir yıl Yuvarlak 10.

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

eklemek en yakın on yıl için:

Tamsayı bölümü, tam sayı 20'ye yuvarlanmak üzere 1998'inizi 199.8'e dönüştürür 0, 10'a kadar geri almak için 10 ile çarpın.

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

Burada biraz tamsayı bölümü kullanabilirsiniz. Sadece her sayıya kaç yıl geçtiğini gör.

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

Ya da benzer şekilde x - (x %% 10) '. – thelatemail

0

Tamsayılar için floor_date() kullanamazsınız; tarih veya tarih nesneler içindir. MrFlick'in cevabında daha önce önerildiği gibi, tamsayı hesaplama yapmak için lubridat gerekmez. Eğer lubridate kullanmak istiyorsunuz, o böyle bir şey yapılabilir:


library(lubridate) 

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

iyi nokta. Teşekkürler. –