Acabo de darme cuenta que tenías casi la solución, no lo había leído,
disculpa.
Lo puedes encapsular así:
diasMes2 = function(limites){
inicio = as.Date(limites[1], format = "%Y-%m-%d")
fin = as.Date(limites[2], format = "%Y-%m-%d")
return(table(format(seq(inicio, fin, by=1), "%m")))
}
apply(df, 1, diasMes2)
Un saludo,
Isidro Hidalgo Arellano
Observatorio del Mercado de Trabajo
Consejería de Economía, Empresas y Empleo http://www.castillalamancha.es/
-----Mensaje original-----
De: Isidro Hidalgo Arellano [mailto:[email protected]]
Enviado el: viernes, 07 de abril de 2017 13:03
Para: 'Rubén Coca' <[email protected]>; 'Lista R'
<[email protected]>
Asunto: RE: [R-es] Distribuir intervalo de días entre meses
Podrías probar con algo así:
require(lubridate)
diasMes = function(limites){
inicio = as.Date(limites[1], format = "%Y-%m-%d")
fin = as.Date(limites[2], format = "%Y-%m-%d")
secuencia = seq(inicio, fin, "days")
meses = month(secuencia)
return(table(meses))
}
apply(df, 1, diasMes)
Un saludo,
Isidro Hidalgo Arellano
Observatorio del Mercado de Trabajo
Consejería de Economía, Empresas y Empleo http://www.castillalamancha.es/
-----Mensaje original-----
De: R-help-es [mailto:[email protected]] En nombre de Rubén
Coca Enviado el: viernes, 07 de abril de 2017 12:02
Para: Lista R <[email protected]>
Asunto: [R-es] Distribuir intervalo de días entre meses
Hola,
Partiendo de un data frame con 2 variables de fecha (inicio y fin):
df <- data.frame(inicio = c(as.Date("2016-01-01"),
as.Date("2016-02-14")),
fin = c(as.Date("2016-02-01"),
as.Date("2016-02-29")))
Necesitaría crear 12 nuevas columnas adicionales, una para cada mes, que
compute el número de días del intervalo que caen en cada mes. El resultado
deseado sería algo así:
inicio fin ene feb mar abr may jun
jul ago sep oct nov dic
2016-01-01 2016-02-01 31 1 0 0 0 0 0
0 0 0 0 0
2016-02-14 2016-02-29 0 15 0 0 0 0 0
0 0 0 0 0
Buscando he encontrado una aproximación al problema del reparto, pero no es
válida para data frames. La detallo por si sirve de inspiración:
table(format(seq(df$inicio, df$fin, by=1), "%m"))
Muchas gracias.
Rubén
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es
_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es