gpt4 book ai didi

r - 对 2 个变量进行分组总和并从总计中减去

转载 作者:行者123 更新时间:2023-12-04 00:49:48 24 4
gpt4 key购买 nike

我有一个如下形式的 data.table:-

library(data.table)
b <- data.table(Code_Nm = c(rep("a", 3), rep("b", 3), rep("d", 3)),
Year = rep(2011:2013, 3), total = rep(10, 9),
a = c(rep(0, 3), 1:6), b = c(7:9, 0, 0, 0, 10:12), d = c(13:18, 0, 0, 0))
b

# Code_Nm Year total a b d
#1: a 2011 10 0 7 13
#2: a 2012 10 0 8 14
#3: a 2013 10 0 9 15
#4: b 2011 10 1 0 16
#5: b 2012 10 2 0 17
#6: b 2013 10 3 0 18
#7: d 2011 10 4 10 0
#8: d 2012 10 5 11 0
#9: d 2013 10 6 12 0

我想得到一个 data.table 使得名为 actual 的最后一列的值等于 total 减去每个 Code_Nm 的年度组。 IE。对于 2011 中的 a,它是 10 减去所有 2011 值的总和,但来自列 a。这等于 10 - (1+4)

2012 中的 a 类似,它是 10 减去所有 2012 值的总和,但来自列 一个。这等于 10 - (2+5)

2011 中的 b 类似,它是 10 减去所有 2011 值的总和,但来自列 b。这等于 10 - (7+10)。对于 2012 中的 b,它是 10 减去所有 2012 值的总和,但来自列 b。这等于 10 - (8+11)

d 列也类似。

最终结果如下data.table:-

b <- data.table(Code_Nm = c(rep("a", 3), rep("b", 3), rep("d", 3)),
Year = rep(2011:2013, 3), total = rep(10, 9),
a = c(rep(0, 3), 1:6), b = c(7:9, 0, 0, 0, 10:12), d = c(13:18, 0, 0, 0),
actual = c(5, 3, 1, -7, -9, -11, -19, -21, -23))
b

# Code_Nm Year total a b d actual
#1: a 2011 10 0 7 13 5
#2: a 2012 10 0 8 14 3
#3: a 2013 10 0 9 15 1
#4: b 2011 10 1 0 16 -7
#5: b 2012 10 2 0 17 -9
#6: b 2013 10 3 0 18 -11
#7: d 2011 10 4 10 0 -19
#8: d 2012 10 5 11 0 -21
#9: d 2013 10 6 12 0 -23

请使用data.table给出解决方案。

提前致谢。

最佳答案

在用感兴趣的列指定 .SDcols 并减去之后,我们可以在 data.table (.SD) 的子集上使用 rowSums来自“总计”

b[, actual := total  - rowSums(.SD), .SDcols = a:d]

-输出

b
# Code_Nm Year total a b d actual
#1: a 2011 10 0 2 3 5
#2: a 2012 10 0 3 4 3
#3: a 2013 10 0 4 5 1
#4: b 2011 10 1 0 6 3
#5: b 2012 10 2 0 7 1
#6: b 2013 10 3 0 8 -1
#7: d 2011 10 4 5 0 1
#8: d 2012 10 5 6 0 -1
#9: d 2013 10 6 7 0 -3

关于r - 对 2 个变量进行分组总和并从总计中减去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67387740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com