r - 对 2 个变量进行分组总和并从总数中减去
问题描述
我有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
。即a
,2011
它是除列之外的所有值的10
负总和。这等于。2011
a
10 - (1+4)
a
与in类似2012
,它是除column 之外10
的所有值的负总和。这等于。2012
a
10 - (2+5)
类似的是b
,2011
它是除列之外的所有值的10
负总和。这等于。对于in ,它是除column 之外的所有值的负总和。这等于。2011
b
10 - (7+10)
b
2012
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
.
提前致谢。
解决方案
在指定感兴趣的列并从“总计”中减去之后,我们可以rowSums
在 data.table ( ) 的子集上使用.SD
.SDcols
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
推荐阅读
- jenkins - 将 gitlab 与 jenkins 集成时 404 Not found
- shell - 为什么shell忽略星号glob
- php - 在 WooCommerce 中按运输区域添加运输方式
- android - android-为运行时权限创建阻塞调用
- node.js - Heroku 上的 Angularjs 应用程序:HTTPS 请求被取消并被 HTTP 请求取代,该请求因混合内容而被阻止
- python-3.x - 类 - 如何打印类中的值
- c++ - 运行时错误:引用绑定到“int”类型的空指针
- flask - 为什么我收到错误,因为“方法必须有一个第一个参数,通常称为'self'”用于 flask-socket-io 连接事件
- javascript - Bootstrap4:在用户滚动时将元素移动/添加到我的导航栏
- r - 发出 lapply 多个数据帧