我有一个data.table
, dt:
dt
Id v1 v2 v3 x1 x2 x3
1 7 1 3 5 6 8
2 1 3 5 6 8 5
3 3 5 6 8 5 1
v1、v2、v3 和 x1、x2、x3 是数值变量
我想从“v”列中减去“x”列,即计算差异v1 - x1
, v2 - x2
等等。在我的真实数据中,我可能有数百个这样的变量对。
期望的输出:
dt
Id v1 v2 v3 x1 x2 x3 diff1 diff2 diff3
1 7 1 3 5 6 8 -2 -4 -3
2 1 3 5 6 8 5 -5 -5 0
3 3 5 6 8 5 1 -3 0 5
我已经尝试过以下方法:
newnames <- paste0("diff", 1:3)
v <- paste0("v", 1:3)
x <- paste0("x", 1:3)
dt[ , c(newnames) := get(v) - get(x)]
然而,这会导致 3 个相同的列都包含差异v1 - x1
.
我知道一个可能的解决方案是这样的
dt[ , .(v1 - x1, v2 - x2, v3 - x3)]
然而,如果我必须输入 100 个不像 v1 和 x1 那么简单的名称,那么这是一个相当长的代码,可能会出现许多输入错误。
我希望你可以帮助我。