[R] help on date dataset

arun smartpink111 at yahoo.com
Sat Nov 10 20:44:21 CET 2012


Thanks, Rui,

Got it right:
 extraction(dat,date1,date2,format="%d/%m/%Y")
#        DATE    PAYS   x
#1 26/04/2009 Mexique  18
#2 26/04/2009     usa 100


A.K.



----- Original Message -----
From: Rui Barradas <ruipbarradas at sapo.pt>
To: arun <smartpink111 at yahoo.com>; r-help <r-help at r-project.org>
Cc: 
Sent: Saturday, November 10, 2012 2:33 PM
Subject: Re: [R] help on date dataset

Ok, I've coerced DATE to class Date before running the function:

dat$DATE <- as.Date(dat$DATE, format = "%d/%m/%Y")

Without it the function would be:


extraction <- function(DF, date1, date2, format = "%Y-%m-%d"){
     date <- as.Date(DF[[1]], format)
     date1 <- as.Date(date1, format)
     date2 <- as.Date(date2, format)
     idx <- date1 < date & date < date2
     aggregate(DF[idx, 3], DF[idx, 1:2], FUN = sum)
}

date1<-"24/04/2009"
date2<-"27/04/2009"
extraction(dat, date1, date2, format = "%d/%m/%Y")
#        DATE    PAYS   x
#1 26/04/2009 Mexique  18
#2 26/04/2009     usa 100


Note also that the op uses '<' and '>' not'<=' and '>=' so our results 
are different.

Rui Barradas
Em 10-11-2012 19:15, arun escreveu:
> Thanks Rui,
>
> I tried that too:
> dat <- read.table(text="
> DATE                       PAYS         nb_pays.ILI.
> 1   24/04/2009                 usa            0
> 2   24/04/2009                 usa            0
> 3   24/04/2009             Mexique            0
> 4   24/04/2009             Mexique            0
> 5   26/04/2009                 usa           20
> 6   26/04/2009                 usa           20
> 7   26/04/2009                 usa           20
> 8   26/04/2009                 usa           20
> 9   26/04/2009                 usa           20
> 10  26/04/2009             Mexique           18
> 11  27/04/2009                 usa           40
> 12  27/04/2009             Mexique           26
> 13  27/04/2009              Canada            6
> 14  27/04/2009               Spain            1
> 15  28/04/2009             Canada             6
> ", header = TRUE)
>
>
> extraction <- function(DF, date1, date2, format = "%Y-%m-%d"){
>       date1 <- as.Date(date1, format)
>       date2 <- as.Date(date2, format)
>       idx <- date1 < DF[[1]] & DF[[1]] < date2
>       aggregate(DF[idx, 3], DF[idx, 1:2], FUN = sum)
> }
>
>
>
> extraction(dat,"24/04/2009","26/04/2009", format="%d/%m/%Y")
> #Error in aggregate.data.frame(as.data.frame(x), ...) :
>   # no rows to aggregate
> #In addition: Warning messages:
> #1: In extraction(dat, "24/04/2009", "26/04/2009", format = "%d/%m/%Y") :
>   # Incompatible methods ("Ops.Date", "Ops.factor") for "<"
> #2: In extraction(dat, "24/04/2009", "26/04/2009", format = "%d/%m/%Y") :
>   # Incompatible methods ("Ops.factor", "Ops.Date") for "<"
>
> date1<-"24/04/2009"
>   date2<-"27/04/2009"
>
>   extraction(dat,"24/04/2009","26/04/2009", format="%d/%m/%Y")
> #Error in aggregate.data.frame(as.data.frame(x), ...) :
>   # no rows to aggregate
> #In addition: Warning messages:
> #1: In extraction(dat, "24/04/2009", "26/04/2009", format = "%d/%m/%Y") :
>   # Incompatible methods ("Ops.Date", "Ops.factor") for "<"
> #2: In extraction(dat, "24/04/2009", "26/04/2009", format = "%d/%m/%Y") :
>   # Incompatible methods ("Ops.factor", "Ops.Date") for "<"
>
>   sessionInfo()
> R version 2.15.0 (2012-03-30)
> Platform: x86_64-pc-linux-gnu (64-bit)
>
> locale:
>   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>   [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
>   [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
>   [7] LC_PAPER=C                 LC_NAME=C
>   [9] LC_ADDRESS=C               LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> other attached packages:
> [1] zoo_1.7-7     stringr_0.6   reshape_0.8.4 plyr_1.7.1
>
> loaded via a namespace (and not attached):
> [1] grid_2.15.0    lattice_0.20-0 tools_2.15.0
>
>
>
> Arun
>
>
>
> ----- Original Message -----
> From: Rui Barradas <ruipbarradas at sapo.pt>
> To: arun <smartpink111 at yahoo.com>
> Cc: R help <r-help at r-project.org>
> Sent: Saturday, November 10, 2012 1:53 PM
> Subject: Re: [R] help on date dataset
>
> Hello,
>
> Arun, you're using the wrong format, "%Y-%m-%d" is the default, with
> "24/04/2009" you must use
>
> extraction(dat, date1, date2, format = "%d/%m/%Y")
> #        DATE    PAYS   x
> #1 2009-04-26 Mexique  18
> #2 2009-04-26     usa 100
>
> Rui Barradas
>
> Em 10-11-2012 18:26, arun escreveu:
>> HI Rui,
>>
>> For some reason, I am not getting the result as expected.
>> date1
>> #[1] "24/04/2009"
>>     date2
>> #[1] "27/04/2009"
>>
>>      extraction(dat,date1,date2,format="%Y-%m-%d")
>> #[1] DATE PAYS x
>> #<0 rows> (or 0-length row.names)
>> #Warning messages:
>> #1: In extraction(dat, date1, date2, format = "%Y-%m-%d") :
>>     # Incompatible methods ("Ops.Date", "Ops.factor") for "<"
>> #2: In extraction(dat, date1, date2, format = "%Y-%m-%d") :
>>     # Incompatible methods ("Ops.factor", "Ops.Date") for "<"
>>
>> extraction(dat,"24/04/2009","27/04/2009",format="%Y-%m-%d")
>> #[1] DATE PAYS x
>> #<0 rows> (or 0-length row.names)
>> #Warning messages:
>> #1: In extraction(dat, "24/04/2009", "27/04/2009", format = "%Y-%m-%d") :
>>
>> I tried with my function:
>> fun1<-function(dat,date1,date2){
>> date1new<-as.Date(date1,format="%d/%m/%Y")
>> date2new<-as.Date(date2,format="%d/%m/%Y")
>> dat[,1]<-as.Date(dat$DATE,format="%d/%m/%Y")
>> res1<-with(dat,aggregate(nb_pays.ILI.,by=list(DATE,PAYS),sum))
>> names(res1)<-names(dat)
>> res2<-res1[res1[,1]>=date1new & res1[,1] <=date2new,]
>> res2<-res2[order(res2[,1],res2[,2]),]
>> #res2[,1]<-as.POSIXct(res2[,1])    #if you want to convert to as.POSIXct()
>> rownames(res2)<-1:nrow(res2)
>> res2}
>>
>>     fun1(dat,date1,date2)
>> #        DATE    PAYS nb_pays.ILI.
>> #1 2009-04-24 Mexique            0
>> #2 2009-04-24     usa            0
>> #3 2009-04-26 Mexique           18
>> #4 2009-04-26     usa          100
>> #5 2009-04-27  Canada            6
>> #6 2009-04-27 Mexique           26
>> #7 2009-04-27   Spain            1
>> #8 2009-04-27     usa           40
>>
>> A.K.
>>
>>
>>
>>
>> From: Rui Barradas <ruipbarradas at sapo.pt>
>> To: anoumou <teko_maurice at yahoo.fr>
>> Cc: r-help at r-project.org
>> Sent: Saturday, November 10, 2012 12:17 PM
>> Subject: Re: [R] help on date dataset
>>
>> Hello,
>>
>> Sorry, forgot the sum part.
>>
>> extraction <- function(DF, date1, date2, format = "%Y-%m-%d"){
>>        date1 <- as.Date(date1, format)
>>        date2 <- as.Date(date2, format)
>>        idx <- date1 < DF[[1]] & DF[[1]] < date2
>>        aggregate(DF[idx, 3], DF[idx, 1:2], FUN = sum)
>> }
>>
>>
>> Hope this helps,
>>
>> Rui Barradas
>> Em 10-11-2012 17:13, Rui Barradas escreveu:
>>> Hello,
>>>
>>> If I understand it correctly, you have a data.frame whose first column is a date and want to extract all lines between two given dates. If so, try the following. Note that I've added two new arguments to your function.
>>>
>>> dat <- read.table(text="
>>> DATE                       PAYS         nb_pays.ILI.
>>> 1   24/04/2009                 usa            0
>>> 2   24/04/2009                 usa            0
>>> 3   24/04/2009             Mexique            0
>>> 4   24/04/2009             Mexique            0
>>> 5   26/04/2009                 usa           20
>>> 6   26/04/2009                 usa           20
>>> 7   26/04/2009                 usa           20
>>> 8   26/04/2009                 usa           20
>>> 9   26/04/2009                 usa           20
>>> 10  26/04/2009             Mexique           18
>>> 11  27/04/2009                 usa           40
>>> 12  27/04/2009             Mexique           26
>>> 13  27/04/2009              Canada            6
>>> 14  27/04/2009               Spain            1
>>> 15  28/04/2009             Canada             6
>>> ", header = TRUE)
>>>
>>> dat
>>> dat$DATE <- as.Date(dat$DATE, format = "%d/%m/%Y")
>>>
>>> extraction <- function(DF, date1, date2, format = "%Y-%m-%d"){
>>>         date1 <- as.Date(date1, format)
>>>         date2 <- as.Date(date2, format)
>>>         idx <- date1 < DF[[1]] & DF[[1]] < date2
>>>         DF[idx, ]
>>> }
>>>
>>> date1 <- "04 03 2009"
>>> date2 <- "04 12 2009"
>>> extraction(dat, date1, date2, format = "%d %m %Y")
>>>
>>>
>>> Hope this helps,
>>>
>>> Rui Barradas
>>> Em 10-11-2012 13:21, anoumou escreveu:
>>>> Hi everybody,
>>>> I am beginer in R and I need your precious help.
>>>> I want to create a small function  in R as in sas to retrieve date.
>>>> I have a file with data that import in R.
>>>>       DATE                       PAYS         nb_pays.ILI.
>>>> 1   24/04/2009                 usa            0
>>>> 2   24/04/2009                 usa            0
>>>> 3   24/04/2009             Mexique            0
>>>> 4   24/04/2009             Mexique            0
>>>> 5   26/04/2009                 usa           20
>>>> 6   26/04/2009                 usa           20
>>>> 7   26/04/2009                 usa           20
>>>> 8   26/04/2009                 usa           20
>>>> 9   26/04/2009                 usa           20
>>>> 10  26/04/2009             Mexique           18
>>>> 11  27/04/2009                 usa           40
>>>> 12  27/04/2009             Mexique           26
>>>> 13  27/04/2009              Canada            6
>>>> 14  27/04/2009               Spain            1
>>>> 15  28/04/2009             Canada             6
>>>>
>>>> I want to create something like that:
>>>> •    When entering two dates date1,date2 in the fuction extraction.
>>>> The result must be: a  new subdata  with one line  per date , per PAYS,per
>>>> nb_pays.ILI (by summing all the number in variable nb_pays.ILI per date,per
>>>> country)  and the date must be between date1 and date2.
>>>> I sart to do somethings like that
>>>> extraction=function(date1,date2)
>>>>        {date<-derdata[["DATE"]]
>>>>         date
>>>>         sort(date)
>>>>         PAYS<-derdata[["PAYS"]]
>>>>         nb_pays.ILI<-derdata[["nb_pays.ILI."]]
>>>>         test1<-as.character(date,"%d %m %y")
>>>>         test1
>>>>         #the first date
>>>>         date1<- "04 03 2009"
>>>>         date1 <- strptime(date1, "%d %m %Y")
>>>>         date1
>>>>         unlist(unclass(date1))
>>>>         date1 <- as.POSIXct(date1)
>>>>         date1
>>>>         attributes(date1)
>>>>         date1 <-unclass(date1)
>>>>         date1
>>>>             #the second date
>>>>         date2<- "04 12 2009"
>>>>         date2 <- strptime(date2, "%d %m %Y")
>>>>         date2
>>>>         unlist(unclass(date2))
>>>>         date2 <- as.POSIXct(date2)
>>>>         date2
>>>>         attributes(date2)
>>>>         date2 <-unclass(date2)
>>>>         date2
>>>>         B1<- as.POSIXct(test1)
>>>>         B1 <-unclass(B1)
>>>>         B1
>>>>         B4 <- B1[(B1>date1) & (B1<date2)]
>>>>         B4
>>>>        }
>>>>
>>>>
>>>>
>>>>
>>>> -- View this message in context: http://r.789695.n4.nabble.com/help-on-date-dataset-tp4649175.html
>>>> Sent from the R help mailing list archive at Nabble.com.
>>>>
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>




More information about the R-help mailing list