R - 条件 IF 减去每行匹配条件
R - Conditional IF Minus Each Row Matching Condition
我的数据集包含 product
类型和 purchase
数量的列。我希望能够从每一行的实际 purchase
中减去每个 product
类型的平均 purchase
数量。
我有一个大致像这样的数据集
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
的长而组织良好的链的中间。有没有办法使用 dplyr
来做到这一点,这样我就可以在不破坏链条的情况下得到我需要的东西?
谢谢。
library(dplyr)
fake_data %>% group_by(product) %>%
mutate(NewVal = purch - mean(purch)) %>% arrange(product)
我的数据集包含 product
类型和 purchase
数量的列。我希望能够从每一行的实际 purchase
中减去每个 product
类型的平均 purchase
数量。
我有一个大致像这样的数据集
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
的长而组织良好的链的中间。有没有办法使用 dplyr
来做到这一点,这样我就可以在不破坏链条的情况下得到我需要的东西?
谢谢。
library(dplyr)
fake_data %>% group_by(product) %>%
mutate(NewVal = purch - mean(purch)) %>% arrange(product)