Ich versuche, einen Datenrahmen zu erstellen 10 Perzentile auf der Grundlage der Aktualität, Häufigkeit und Monetary zu berechnen. Ich habe das meiste davon eingerichtet, aber ich kann nicht herausfinden, warum mein Code drei NTILES zurückgibt, wenn ich nach 10 frage. Ich stehe momentan still. Im nächsten Schritt wird der Prozentsatz der Kunden in jedem ntil berechnet.Computing NTILE in R für RFM-Analyse
Hier ist mein Code:
rm(list = ls())
setwd("/Users/a76475/Documents/Customer_Analytics")
rfm<-read.csv("cdnow_students_transaction.csv")
#Set up test and calibration samples
rfm$DATE <- as.Date(rfm$DATE, format = "%m/%d/%y")
calib <- subset(rfm, rfm$DATE<"1997-09-29")
valid <- subset(rfm, rfm$DATE>"1997-09-30")
#Aggregate for frequency, monetary, and recency -- Calibration
recency<- aggregate(DATE ~ ID, data =calib, FUN = max)
colnames(recency) <- c("ID","Recency")
frequency <- aggregate(DOLLARS ~ ID, data =calib, FUN = length)
colnames(frequency) <- c("ID","Frequency")
monetary <- aggregate(DOLLARS ~ ID, data =calib, FUN = mean)
colnames(frequency) <- c("ID","Monetary")
calib <- merge(frequency, monetary, by = "ID")
calib <- merge(calib, recency, by = "ID")
#Aggregate for frequency, monetary, and recency -- Validation
recency<- aggregate(DATE ~ ID, data =valid, FUN = max)
colnames(recency) <- c("ID","Recency")
frequency <- aggregate(DOLLARS ~ ID, data =valid, FUN = length)
colnames(frequency) <- c("ID","Frequency")
monetary <- aggregate(DOLLARS ~ ID, data =valid, FUN = mean)
colnames(frequency) <- c("ID","Monetary")
valid <- merge(frequency, monetary, by = "ID")
valid <- merge(valid, recency, by = "ID")
colnames(valid) <- c("ID","FREQ","MONETARY","RECENCY")
colnames(calib) <- c("ID","FREQ","MONETARY","RECENCY")
calib$RECENCY <- NULL
#Create recency score
#For validation
for (i in 1:nrow(valid)) {
valid$RECENCY1[i] = as.numeric(max(valid$RECENCY) - valid$RECENCY[i])
}
valid$RECENCY <- valid$RECENCY1
valid$RECENCY1 <- NULL
#For calibration
for (i in 1:nrow(calib)) {
calib$RECENCY1[i] = as.numeric(max(valid$RECENCY) - calib$RECENCY[i])
}
calib$RECENCY <- calib$RECENCY1
calib$RECENCY1 <- NULL
#Merge datasets
rfm <- merge(calib,valid, by="ID", all.x = TRUE)
#Create Column for retention%
require(dplyr)
rfm$monetary.ntile <- ntile(rfm$MONETARY.y,10)
rfm$freq.ntile <- ntile(rfm$FREQ.y,10)
rfm$recency.ntile <- ntile(rfm$RECENCY,10)
Nathan-Luke, willkommen zu Stackoverflow. Um es einfacher zu machen, lies bitte (1) [wie stelle ich eine gute Frage] (http://stackoverflow.com/help/how-to-ask), (2) [Wie erstelle ich einen MCVE] (http://stackoverflow.com/help/mcve) sowie (3) [wie man ein minimales reproduzierbares Beispiel in R zur Verfügung stellt] (http://stackoverflow.com/questions/5963269/how-to-make-a- groß-r-reproduzierbar-Beispiel # antwort-5963610). Dann schlage ich vor, dass Sie Ihre Frage entsprechend bearbeiten und verbessern. Das heißt, stellen einige künstliche Eingabedaten bereit (viele Leser wissen nichts über CDNow-Daten) und vielleicht die erwartete Ausgabe. – lukeA