2016-02-12 14 views
13

vorrei piano una serie di date al decennio più vicino, ad esempio:pavimento un anno per il decennio in R

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

ecc

Speravo che potrei fare questo in Lubridate, come in:

floor_date(1922, 'decade') 

Ma ottengo:

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

Esiste un modo per farlo con garbo, forse evitando una serie di istruzioni if-else per fare il binning, e si spera che eviti un gruppo di cut s per fare il raggruppamento?

risposta

2

Piano all'anno in R per decennio più vicino:

Pensate Modulo come un modo per estrarre la cifra più a destra e usarla per sottrarre dall'anno originale. 1998 - 8 = 1990

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

soffitto un anno in R al decennio più vicino:

soffitto è esattamente come piano, ma aggiungere 10.

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

rotonda un anno in R al decennio più vicino:

La divisione in interi converte il tuo 1998 in 199.8, arrotondato a intero è 20 0, moltiplicare per 10 per tornare al 2000.

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

Qui puoi semplicemente utilizzare una divisione intera. Basta vedere quanti decenni entrano in ciascun numero.

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

O allo stesso modo 'x - (x %% 10)'. – thelatemail

0

Non è possibile utilizzare floor_date() per numeri interi; è per gli oggetti data o datetime. Come già suggerito nella risposta di MrFlick, non è necessario lubridato per eseguire il calcolo integer. Se si desidera utilizzare lubridate, si può fare qualcosa di simile:


library(lubridate) 

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

buon punto. Grazie. –