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.