[R] Case statement in sqldf
Mangalani Peter Makananisa
pmakananisa at sars.gov.za
Tue Sep 12 08:20:59 CEST 2017
Thanks D,
I will work on the solution you gave and give feedback.
-----Original Message-----
From: David Winsemius [mailto:dwinsemius at comcast.net]
Sent: 11 September 2017 05:19 PM
To: Mangalani Peter Makananisa
Cc: r-help at r-project.org
Subject: Re: [R] Case statement in sqldf
> On Sep 11, 2017, at 1:05 AM, Mangalani Peter Makananisa <pmakananisa at sars.gov.za> wrote:
>
> Hi all,
>
> I am trying to create a new variable called Fiscal Year (FY) using case expression in sqldf and I am getting a null FY , see the code below .
>
> Please advise me as to how I can do this mutation.
>
> library(zoo)
> library(lubridate)
> library(stringr)
> library(RH2)
> library(sqldf)
>
> cr$ReportDate = as.Date(cr$ReportDate, format ='%Y-%m-%d')
>
>> cr2 = sqldf(" select ReportDate
> + , case
> + when ReportDate between '2012-04-01' and '2013-03-31'
> + then '2012_13'
> + when ReportDate between '2013-04-01' and '2014-03-31'
> + then '2013_14'
> + when ReportDate between '2014-04-01' and '2015-03-31'
> + then'201415'
> + when ReportDate between '2015-04-01' and '2016-03-31'
> + then '2015_16'
> + when ReportDate between '2016-04-01' and '2017-03-31'
> + then '2016_17'
> + when ReportDate between '2017-04-01' and '2018-03-3'
> + then '2017_18' else null
> + end as FY
> + from cr
> + where ReportDate >= '2012-04-01'
> + ")
There was no cr object in any of the package I loaded although `lubridate` and `stringr` appear unnecessary and were omitted. I get no error with your code using this test object:
cr <- data.frame(ReportDate = seq(as.Date("1970-01-01"), as.Date("2020-01-01"), by="1 year" ))
> cr2 = sqldf(" select ReportDate
+ , case
+ when ReportDate between '2012-04-01' and '2013-03-31'
+ then '2012_13'
+ when ReportDate between '2013-04-01' and '2014-03-31'
+ then '2013_14'
+ when ReportDate between '2014-04-01' and '2015-03-31'
+ then'201415'
+ when ReportDate between '2015-04-01' and '2016-03-31'
+ then '2015_16'
+ when ReportDate between '2016-04-01' and '2017-03-31'
+ then '2016_17'
+ when ReportDate between '2017-04-01' and '2018-03-3'
+ then '2017_18' else null
+ end as FY
+ from cr
+ where ReportDate >= '2012-04-01'
+ ")
>
> str(cr2)
'data.frame': 8 obs. of 2 variables:
$ ReportDate: Date, format: "2013-01-01" "2014-01-01" "2015-01-01" ...
$ FY : chr "2012_13" "2013_14" "201415" "2015_16" ...
>
>
> Thanking you in advance
>
> Kind regards,
>
> Mangalani Peter Makananisa (0005786)
> South African Revenue Service (SARS)
> Specialist: Statistical Support
> TCEI_OR (Head Office)
> Tell: +272 422 7357, Cell: +2782 456 4669
>
> Please Note: This email and its contents are subject to our email
> legal notice which can be viewed at
> http://www.sars.gov.za/Pages/Email-disclaimer.aspx
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
David Winsemius
Alameda, CA, USA
'Any technology distinguishable from magic is insufficiently advanced.' -Gehm's Corollary to Clarke's Third Law
Please Note: This email and its contents are subject to our email legal notice which can be viewed at http://www.sars.gov.za/Pages/Email-disclaimer.aspx
[[alternative HTML version deleted]]
More information about the R-help
mailing list