Hello Jim,
i have converted all my variable data type according to your attached
example including date, and my dataset looks like this.


ID                 purchase                 date
1234             10.2                         2017-02-18
3453             18.9                         2017-03-22
7689              8                             2017-03-24



but when I'm passing the data into the function it is giving me same values
for entire observations i. r=2, f=2, m=2

and which part of your code is responsible to calculate recency
and frequency score i mean how it will determine how many times a user made
a purchase in last 30 days so that we can put that user into our own
defined category.

one more thing it would be great if you can explain lil bit about finish
date. because i'm not able to understand what do you meant by finish date.

Thanks

On 10 October 2017 at 02:27, Jim Lemon <drjimle...@gmail.com> wrote:

> I seriously doubt that you are running the code I sent. What you have
> probably done is to run your data, which has a different date format,
> without changing the breaks or the date format arguments. As you
> haven't provided any example that shows what you are doing, I can't
> guess what the problem is.
>
> Jim
>
>
> On Mon, Oct 9, 2017 at 9:40 PM, Hemant Sain <hemantsai...@gmail.com>
> wrote:
> > I'm getting all the rows as NA in  Cscore and almost most of the
> observation
> > in R and F and M are also NA.
> > what can be the reason for this. also suggest me the appropriate
> solution.
> >
> > On 9 October 2017 at 15:51, Jim Lemon <drjimle...@gmail.com> wrote:
> >>
> >> Hi Hemant,
> >> Here is an example that might answer your questions. Please don't run
> >> previous code as it might not work.
> >>
> >> I define the break values as arguments to the function
> >> (rbreaks,fbreaks,mbreaks) If you want the breaks to work, make sure that
> >> they cover the range of the input values, otherwise you get NAs.
> >>
> >> # expects a three (or more) column data frame where
> >> # column 1 is customer ID, column 2 is amount of purchase
> >> # and column 3 is date of purchase
> >> qdrfm<-function(x,rbreaks=3,fbreaks=3,mbreaks=3,date.format="%Y-%m-%d",
> >>  weights=c(1,1,1),finish=NA) {
> >>
> >>  # if no finish date is specified, use current date
> >>  if(is.na(finish)) finish<-as.Date(date(), "%a %b %d %H:%M:%S %Y")
> >>  x$rscore<-as.numeric(finish-as.Date(x[,3],date.format))
> >>  x$rscore<-as.numeric(cut(x$rscore,breaks=rbreaks,labels=FALSE))
> >>  custIDs<-unique(x[,1])
> >>  ncust<-length(custIDs)
> >>  rfmout<-data.frame(custID=custIDs,rscore=rep(0,ncust),
> >>   fscore=rep(0,ncust),mscore=rep(0,ncust))
> >>  rfmout$rscore<-cut(by(x$rscore,x[,1],min),breaks=rbreaks,labels=FALSE)
> >>  rfmout$fscore<-cut(table(x[,1]),breaks=fbreaks,labels=FALSE)
> >>  rfmout$mscore<-cut(by(x[,2],x[,1],sum),breaks=mbreaks,labels=FALSE)
> >>  rfmout$cscore<-(weights[1]*rfmout$rscore+
> >>   weights[2]*rfmout$fscore+
> >>   weights[3]*rfmout$mscore)/sum(weights)
> >>  return(rfmout[order(rfmout$cscore),])
> >> }
> >>
> >> set.seed(12345)
> >> x2<-data.frame(ID=sample(1:50,250,TRUE),
> >>  purchase=round(runif(250,5,100),2),
> >>  date=paste(rep(2016,250),sample(1:12,250,TRUE),
> >>   sample(1:28,250,TRUE),sep="-"))
> >>
> >> # example 1
> >> qdrfm(x2)
> >>
> >> # example 2
> >> qdrfm(x2,rbreaks=c(0,200,400),fbreaks=c(0,5,10),mbreaks=c(0,350,700),
> >>  finish=as.Date("2017-01-01"))
> >>
> >> Jim
> >>
> >
> >
> >
> > --
> > hemantsain.com
>



-- 
hemantsain.com

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to