【发布时间】:2021-05-04 15:31:02
【问题描述】:
我有一个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。对于a 中的2011,它是10 减去所有2011 值的总和,但来自a 列。这等于10 - (1+4)。
对于2012 中的a 类似,它是10 减去所有2012 值的总和,但来自列a。这等于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 提供解决方案。
提前致谢。
【问题讨论】:
标签: r data.table