Foro de debate

Trabajar con fechas en R

Re: Trabajar con fechas en R(la definitiva)

de Jose Luis Cebrián -
Número de respuestas: 4


Buenas.

A mi me sale para todos las filas, entiendo que si no es así no sirve de mucho.

A veces me da ese error que tu dices pero aún asi no pasa nada (o sea que me genera "fechas1).

He creado las variables  DAT_INI_PER_CONSUM2 y DAT_FI_PER_CONSUM2 

en formato fecha porque las otras me salian como factores.

Como ves en head(fechas3) y tail(fechas3) sale para todas las filas.

Confirmame que te sale o que no te sale 

Saludos


 fechas <- read.csv("~/fechas.txt", sep="")
> head (fechas)
  num_obs DAT_INI_PER_CONSUM DAT_FI_PER_CONSUM VO_CONSUM_TOT dif.dates
1       1         11/05/2015        08/07/2015         -1280        58
2       2         11/05/2015        08/07/2015          1280        58
3       3         14/10/2015        14/12/2015            17        61
4       4         06/11/2015        08/01/2016             8        63
5       5         06/11/2015        08/01/2016            13        63
6       6         24/11/2015        25/01/2016             9        62
  consumdiario
1          -22
2           22
3            0
4            0
5            0
6            0
> fechas$DAT_INI_PER_CONSUM2<-as.Date(fechas$DAT_INI_PER_CONSUM, format="%d/%m/%Y")
> fechas$DAT_FI_PER_CONSUM2<-as.Date(fechas$DAT_FI_PER_CONSUM, format="%d/%m/%Y")
> fechas1<-setDT(fechas)[,.(dias=seq(DAT_INI_PER_CONSUM2, DAT_FI_PER_CONSUM2, by='days')),      
                         by=num_obs]
Error in .(dias = seq(DAT_INI_PER_CONSUM2, DAT_FI_PER_CONSUM2, by = "days")): could not find function "."
> head (fechas1)
   num_obs       dias
1:       1 2015-05-11
2:       1 2015-05-12
3:       1 2015-05-13
4:       1 2015-05-14
5:       1 2015-05-15
6:       1 2015-05-16
> tail(fechas1)
   num_obs       dias
1:       6 2016-01-20
2:       6 2016-01-21
3:       6 2016-01-22
4:       6 2016-01-23
5:       6 2016-01-24
6:       6 2016-01-25
> fechas2<-merge(fechas, fechas1); head (fechas2)
   num_obs DAT_INI_PER_CONSUM DAT_FI_PER_CONSUM VO_CONSUM_TOT dif.dates
1:       1         11/05/2015        08/07/2015         -1280        58
2:       1         11/05/2015        08/07/2015         -1280        58
3:       1         11/05/2015        08/07/2015         -1280        58
4:       1         11/05/2015        08/07/2015         -1280        58
5:       1         11/05/2015        08/07/2015         -1280        58
6:       1         11/05/2015        08/07/2015         -1280        58
   consumdiario DAT_INI_PER_CONSUM2 DAT_FI_PER_CONSUM2       dias
1:          -22          2015-05-11         2015-07-08 2015-05-11
2:          -22          2015-05-11         2015-07-08 2015-05-12
3:          -22          2015-05-11         2015-07-08 2015-05-13
4:          -22          2015-05-11         2015-07-08 2015-05-14
5:          -22          2015-05-11         2015-07-08 2015-05-15
6:          -22          2015-05-11         2015-07-08 2015-05-16
> fechas3<-fechas2%>%
+   mutate(         
+     MES=month(dias))%>%
+   group_by(num_obs, MES)%>%            
+   mutate(         
+     DIAS_MES=n_distinct(dias))%>%
+   as.data.frame()
> head(fechas3)
  num_obs DAT_INI_PER_CONSUM DAT_FI_PER_CONSUM VO_CONSUM_TOT dif.dates
1       1         11/05/2015        08/07/2015         -1280        58
2       1         11/05/2015        08/07/2015         -1280        58
3       1         11/05/2015        08/07/2015         -1280        58
4       1         11/05/2015        08/07/2015         -1280        58
5       1         11/05/2015        08/07/2015         -1280        58
6       1         11/05/2015        08/07/2015         -1280        58
  consumdiario DAT_INI_PER_CONSUM2 DAT_FI_PER_CONSUM2       dias MES
1          -22          2015-05-11         2015-07-08 2015-05-11   5
2          -22          2015-05-11         2015-07-08 2015-05-12   5
3          -22          2015-05-11         2015-07-08 2015-05-13   5
4          -22          2015-05-11         2015-07-08 2015-05-14   5
5          -22          2015-05-11         2015-07-08 2015-05-15   5
6          -22          2015-05-11         2015-07-08 2015-05-16   5
  DIAS_MES
1       21
2       21
3       21
4       21
5       21
6       21
> tail (fechas3)
    num_obs DAT_INI_PER_CONSUM DAT_FI_PER_CONSUM VO_CONSUM_TOT dif.dates
366       6         24/11/2015        25/01/2016             9        62
367       6         24/11/2015        25/01/2016             9        62
368       6         24/11/2015        25/01/2016             9        62
369       6         24/11/2015        25/01/2016             9        62
370       6         24/11/2015        25/01/2016             9        62
371       6         24/11/2015        25/01/2016             9        62
    consumdiario DAT_INI_PER_CONSUM2 DAT_FI_PER_CONSUM2       dias MES
366            0          2015-11-24         2016-01-25 2016-01-20   1
367            0          2015-11-24         2016-01-25 2016-01-21   1
368            0          2015-11-24         2016-01-25 2016-01-22   1
369            0          2015-11-24         2016-01-25 2016-01-23   1
370            0          2015-11-24         2016-01-25 2016-01-24   1
371            0          2015-11-24         2016-01-25 2016-01-25   1
    DIAS_MES
366       25
367       25
368       25
369       25
370       25
371       25

En respuesta a Jose Luis Cebrián

Re: Trabajar con fechas en R(la definitiva)

de Monica Ortiz Guijarro -

Vale ahora sí me sale igual que a ti, muchas gracias por la ayuda!! me viene genial para hacer un estudio de distribución del consumo del agua que tengo en mente para mi trabajo. La verdad que R te soluciona mucho la vida. 

Saludos!

En respuesta a Jose Luis Cebrián

Re: Trabajar con fechas en R(la definitiva)

de Ana Bonilla Ruiz -

Buenas tardes, estoy usando lo que respondió en este foro, pero tengo el problema de que la fecha de inicio y final coinciden, entoces , me da este error:

Error in seq.int(0, to0 -from , by) :wrong in 'by' argument.

¿Cómo puedo solventarlo?

Un saludo, Ana.

En respuesta a Ana Bonilla Ruiz

Re: Trabajar con fechas en R(la definitiva)

de Manuel Muñoz Márquez -

Buenas Ana:

Las fechas de inicio y fin no pueden coincidir, pues las de inicio y fin de cada periodo.

Si pones un ejemplo de lo que intentas y de tu código es más fácil ayudarte.

Un saludo.