【发布时间】:2019-03-13 11:01:31
【问题描述】:
在我的数据中,如果订单包含某种产品,我有客户 ID、订单日期和指示符。 我想给每个客户一个指标,如果他的第一个订单包含这种类型的产品。但是因为我的数据很大,所以我不能使用 group_by 和 case_when,因为它太慢了。我想我可以通过使用 data.table 来加快速度。
你能给我指出一个解决方案吗?直到现在我还没有与 data.table 有任何联系......
# generate data
id <- round(rnorm(3000, mean = 5000, 400),0)
date <- seq.Date(as.Date("2018-01-01"), as.Date("2018-12-31"), "day")
date <- sample(date, length(id), replace = TRUE)
indicator <- rbinom(length(id), 1, 0.5)
df <- data.frame(id, date, indicator)
df$id <- as.factor(df$id)
# Does the first Order contain X?
df <- df %>% group_by(id) %>% mutate(First_Order_contains_x = case_when(
date == min(date) & indicator == "1" ~ 1,
TRUE ~ 0
)) %>% ungroup()
# If first order > 1 ==> all orders get 1 //
df <- df %>% group_by(id) %>% mutate(Customer_type = case_when(
sum(First_Order_contains_x) > 0 ~ "Customer with X in first order",
TRUE ~ "Customer without x in first order"
)) %>% ungroup()
【问题讨论】:
-
谢谢,我改了!
-
当您有多个选择时,您应该使用
case_when。这里你只有两个,所以你可以在mutate中尝试First_Order_contains_x = as.integer(date == min(date) & indicator == "1")。
标签: r dplyr data.table