He cambiado las fechas de los intervalos para asegurarme de que funcionaba. 
Simplemente haciendo que la función te devuelva los 12 meses, "sapply()" te las 
coloca bien. Luego sólo hay que sumar por filas:

 

df <- data.frame(inicio = c(as.Date("2016-03-01"),

                            as.Date("2016-02-14")),

                 fin = c(as.Date("2016-05-01"),

                         as.Date("2016-02-29")))

 

diasMes3 = function(posicion){

  inicio = as.Date(df[posicion, 1], format = "%Y-%m-%d")

  fin = as.Date(df[posicion, 2], format = "%Y-%m-%d")

  extraccion = c(table(format(seq(inicio, fin, by=1), "%m")))

  recuento = rep(0, 12)

  names(recuento) = formatC(1:12, width = 2, format = "d", flag = "0")

  recuento[names(extraccion)] = extraccion

  return(recuento)

}

 

resultado = sapply(1:nrow(df), diasMes3)

 

rowSums(resultado)

 

Un saludo.

 

 

Isidro Hidalgo Arellano

Observatorio del Mercado de Trabajo

Consejería de Economía, Empresas y Empleo

http://www.castillalamancha.es/

 

 

 

De: Rubén Coca [mailto:[email protected]] 
Enviado el: viernes, 07 de abril de 2017 23:46
Para: Isidro Hidalgo Arellano <[email protected]>
Asunto: Re: [R-es] Distribuir intervalo de días entre meses

 

Gracias por tu respuesta Isidro, me faltaría resolver la creación de columnas 
en el data frame con el resultado. ¿Alguna idea?

 

Un saludo,

Rubén

 

2017-04-07 13:08 GMT+02:00 Isidro Hidalgo Arellano <[email protected] 
<mailto:[email protected]> >:

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] <mailto:[email protected]> ]
Enviado el: viernes, 07 de abril de 2017 13:03
Para: 'Rubén Coca' <[email protected] <mailto:[email protected]> >; 
'Lista R'
<[email protected] <mailto:[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] 
<mailto:[email protected]> ] En nombre de Rubén
Coca Enviado el: viernes, 07 de abril de 2017 12:02
Para: Lista R <[email protected] <mailto:[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] <mailto:[email protected]> 
https://stat.ethz.ch/mailman/listinfo/r-help-es




        [[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a