【发布时间】:2017-09-28 11:58:46
【问题描述】:
假设我有一个客户数据框 -
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
我想做两个不同的动作: 1.查看前三位顾客每天花费的时间和金钱 2. 将其与每天的随机 3 位客户进行比较(他们可以在前三个之内,也可以不在前三个之内) 如果那天的客户少于 3 个,我想包括当天的所有客户。
最有效的方法是什么?
目前我的代码是:
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
}
对于随机部分:
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])),])
我很确定有一种更有效的方法可以做到这一点,但我是这种语言的新手,无法找到这个特定问题的答案。
谢谢!
【问题讨论】:
标签: r sorting dataframe sequence sampling