R - 条件IF减去每行匹配条件

时间:2016-07-14 22:07:55

标签: r dplyr split-apply-combine

我的数据集包含<script type="text/javascript" src="main.js?v=12392823"></script> 类型和product数量的列。我希望能够从每行的实际purchase中减去每个purchase类型的平均product数量。

我的数据集大致与此类似

purchase

我可以使用split-apply-combine方法执行此操作,如下所示:

library(dplyr)
set.seed(42)
product <- paste("prod - " , sample(c("A", "B", "C", "D"), size = 15, 
                                replace = TRUE))
purch <- sample(5:10, size = 15, replace = TRUE)

fake_data <- tibble(product, purch)

这是有效的,但它恰好位于使用data_s <- split(fake_data, fake_data$product) #split data_a <- lapply(data_s, function(m) cbind(m, m$purch - mean(m$purch))) #apply data_c <- bind_rows(data_a) #combine %>%的长链且组织良好的链中间。有没有办法使用dplyr来做到这一点,这样我可以在不破坏链条的情况下得到我需要的东西?

谢谢。

1 个答案:

答案 0 :(得分:1)

library(dplyr)
fake_data %>% group_by(product) %>% 
                 mutate(NewVal = purch - mean(purch)) %>% arrange(product)