mtext manipulation ggplot change r date lubridate

manipulation - mtext r



Piso un año a la década en R (4)

Me gustaría incluir un conjunto de fechas para la década más cercana, por ejemplo:

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

etc.

Esperaba poder hacer esto en Lubridate, como en:

floor_date(1922, ''decade'')

Pero me sale:

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

¿Hay alguna manera de hacer esto con gracia, tal vez evitando un montón de instrucciones if-else para hacer el binning, y con suerte evitando un montón de cut para hacer la agrupación?


No puedes usar floor_date() para enteros; Es para objetos de fecha o fecha y hora. Como ya se sugirió en la respuesta de MrFlick, no necesita lubricación para realizar el cálculo de enteros. Si desea usar lubridate, se puede hacer algo como esto:


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


Puedes usar una división entera aquí. Basta con ver cuántas décadas entran en cada número.

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


También puedes usar la función de piso así:

floor(1922 / 10) * 10 # [1] 1920

Si necesitas redondear y no piso:

round(1922, digits = -1) # [1] 1920


Piso al año en R a la década más cercana:

Piense en Módulo como una forma de extraer el dígito más a la derecha y utilícelo para restar del año original. 1998 - 8 = 1990

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

Techo al año en R a la década más cercana:

El techo es exactamente igual al piso, pero agregue 10.

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

Ronda de un año en R a la década más cercana:

La división entera convierte tu 1998 a 199.8, redondeado a entero es 200, multiplica eso por 10 para volver a 2000.

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

Handy dandy copy pasta para aquellos de ustedes que no les gusta pensar:

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))

que imprime:

# 1990 # 1990 # 2000 # 2000 # 1990 # 2000

Fuente: https://rextester.com/AZL32693

No sea tímido en la cinta adhesiva con este doblador, es lo único que mantiene la unidad unida.