【问题标题】:R - Conditional IF Minus Each Row Matching ConditionR - 条件 IF 减去每行匹配条件
【发布时间】:2016-07-14 22:07:54
【问题描述】:

我的数据集包含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)

我可以使用 split-apply-combine 方法来做到这一点,如下所示:

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

这可行,但它出现在使用%&gt;%dplyr 的长且组织良好的链的中间。有没有办法使用dplyr 来做到这一点,这样我就可以在不破坏链条的情况下得到我需要的东西?

谢谢。

【问题讨论】:

    标签: r dplyr split-apply-combine


    【解决方案1】:
    library(dplyr)
    fake_data %>% group_by(product) %>% 
                     mutate(NewVal = purch - mean(purch)) %>% arrange(product)
    

    【讨论】:

    • 像魅力一样工作。谢谢。
    猜你喜欢
    • 2018-09-07
    • 2021-01-15
    • 1970-01-01
    • 2013-07-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多