分组并从R中任何其他组的值中减去给定组的值

分组并从R中任何其他组的值中减去给定组的值,r,dataframe,datatable,group-by,aggregate,R,Dataframe,Datatable,Group By,Aggregate,我有一个数据表,data,我想按group\u标签对它们进行分组 将一组的值减去其他组的值 换句话说,我想用 B组NYC值 我想减去任何组中与LA相关的任何值, 根据B组中与LA相关的LA值,我的结果如下 结果。我该怎么做 data = data.table(city = c("NYC", "NYC", "NYC", "LA", "LA", "LA"), group_label = c("A", "A", "B", "B", "A", "C"),

我有一个数据表,
data
,我想按
group\u标签对它们进行分组
将一组的值减去其他组的值

换句话说,我想用 B组NYC值

我想减去任何组中与LA相关的任何值, 根据B组中与LA相关的LA值,我的结果如下
结果
。我该怎么做

    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)
                  )
一个选择是

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

或使用
dplyr

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

对不起,让我换个问题。因为我是按多个列分组的。我用它来简化事情。您是否有一个解决方案可以在使用多个列进行分组时使用?我已经看到了:@NoLie。这不是你的问题。关于为每个“城市”从“组”标签“B”中的值“提取”值?@NoLie。如果是多列,
data%>%group\u by(城市1,城市2,…)%> %>代码> @ NoLee。唯一要考虑的是每个“城市”都有一个“B”组标签,每个组只有一个值。否则,可能需要一些Logic。condition@NoLie.
mutate
创建/修改列,而
transmute
仅返回该块中的列,同样的i.ee返回o只有列与分组列一起汇总