Dire que j'ai une trame de données de clients -R Séquence par des colonnes et la séquence aléatoire
cust_df =
Date ArrivalTime TimeInStore AmountSpent
170920 930 30 20
170920 1000 20 20
170920 1001 30 100
170920 1500 15 10
170921 1030 10 200
170921 1111 25 50
170921 1900 10 75
Je veux faire 2 actions différentes: 1. Vérifiez combien de temps et d'argent les 3 premiers clients de chaque jour dépenser 2. Comparez cela au hasard 3 clients de chaque jour (ils peuvent être dans les trois premiers ou pas) Si au cours de cette journée, il y avait moins de 3 clients, je veux inclure tous les clients de ce jour.
Quel est le moyen le plus efficace de le faire?
Actuellement mon code est:
cust_df <- cust_df[order(cust_df$Date, cust_df$ArrivalTime),] #order by time
cust_df_by_Date <- split(cust_df,f = cust_df$Date) #split to dates
cust_num <- sapply(cust_df_by_Date,function(x) dim(x)[1]) #find num of customers per day
first_cust_df <- c()
i <- 1
for(num in cust_num){
if(num>=3){
first_cust_df <- rbind(first_cust_df,cust_df_by_Date[[i]][1:3,])
}
else{
first_cust_df <- rbind(first_cust_df,cust_df_by_Date[[i]][1:num,])
}
i <- i+1
}
Et pour la partie aléatoire:
rand_cust_sampling_df <- ldply(cust_df_by_Date,function(x) x[sample(1:dim(x)[1],ifelse(dim(x)[1]>=3,3,dim(x)[1])),])
Je suis tout à fait sûr qu'il ya une façon de faire plus efficace, mais je suis nouveau à cette langue et n'a pas pu trouver une réponse à cette question spécifique.
Merci!