【问题标题】:group by and subtract value of a given group from values of any other group in R分组并从R中任何其他组的值中减去给定组的值
【发布时间】:2019-07-26 17:07:03
【问题描述】:

我有一个数据表,data,我想将它们按group_label 分组 并从其他组的值中减去一个组的值。

换句话说,我想将任何组中的所有“NYC”值减去 B组中NYC的值。

我想在任何组中减去与 LA 相关的任何值, 来自 B 组中与 LA 相关联的 LA 值。所以我的结果看起来像 result。我该怎么做?

    data = data.table(city = c("NYC", "NYC", "NYC", "LA", "LA", "LA"),
                  group_label = c("A", "A", "B", "B", "A", "C"),
                  time_period = c(1980, 1990, 2000, 1982, 2007, 2010),
                  value = c(2, 20, 13, 24, 4, 6)
                  )


result = data.table(city = c("NYC", "NYC", "NYC", "LA", "LA", "LA"),
                  group_label = c("A", "A", "B", "B", "A", "C"),
                  value = c(2, 20, 13, 24, 4, 6),
                  time_period = c(1980, 1990, 2000, 1982, 2007, 2010),
                  diff = c(-11, 7, 0, 0, -20, -18)
                  )

【问题讨论】:

    标签: r dataframe datatable group-by aggregate


    【解决方案1】:

    一个选项是

    data[, diff := value - value[group_label == "B"],  city]
    

    或dplyr

    library(dplyr)
    data %>%
       group_by(city) %>%
       mutate(diff = value - value[group_label == "B"])
    

    【讨论】:

    • 对不起,让我换个问题。因为我按不止一列分组。我在这里做了一个来简化事情。您是否有一个在与多列分组时有效的解决方案?我已经看到了:stackoverflow.com/questions/24043708/…
    • @NoLie。不是你的问题。关于每个“城市”的“group_label”“B”中的“值”减去“值”?
    • @NoLie。如果是多列,data %>% group_by(city1, city2, ...) %>%
    • @NoLie。唯一需要考虑的是每个“城市”都有“B”“group_label”并且只有一个。每组价值。否则,可能需要一些逻辑条件
    • @NoLie。 mutate 创建/修改列,同时。 transmute 仅返回该块中的列,summarise 也执行相同的操作,即仅返回与分组列一起汇总的列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2023-04-02
    • 2022-09-23
    相关资源
    最近更新 更多