我目前正在处理包含多年购买的大型客户购买数据集。
由于我只想检查客户是否每年都购买,我正在寻找一种有效的方式来在客户层面上汇总这些购买。
最终结果应该看起来像一个表格,其中每一行代表一个独特的客户,由我显示,然后是一些真/假变量,显示他是否在特定年份购买。一个简单的例子:
原始数据类似于:
Customer id Product id year
1 1 2014
2 2 2014
1 3 2015
结果应类似于:
Customer id Bought 2014 Bought 2015
1 TRUE TRUE
2 TRUE FALSE
我尝试使用for-if循环来创建它,以便创建真或假变量但是这似乎有一个巨大的运行时间,这使得它无法用于我正在使用的数据集的大小。 此外,如果我使用for - if循环,我仍然很难在客户级别上汇总数据,因为我不确定要使用什么作为'FUN ='语句。
答案 0 :(得分:1)
这是另一种tidyr
和library(dplyr)
library(tidyr)
df %>%
group_by(customer_id) %>%
gather(variable, value, year) %>%
spread(value, variable) %>%
summarize_each(funs(as.logical(sum(!is.na(.)))), -customer_id, -product_id)
方法,可以适应原始数据中的任意年限。
1920/1080
答案 1 :(得分:0)
凯文尝试使用dplyr
#create your data.frame
test <- data.frame(cus=c(1,2,1),prod=c(1,2,3),year=c(2014,2014,2015))
summary <- test %>%
group_by(cus) %>%
summarise(bought.2014 = any(year==2014),
bought.2015 = any(year==2015)
)