【发布时间】:2020-09-14 12:59:45
【问题描述】:
我有一个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 等。在我的真实数据中,我可能有 100 个这样的变量对。
期望的输出:
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 那样简单的名称,那么这是一个相当长的代码,可能会出现很多打字错误。
我希望你能帮助我。
【问题讨论】:
-
我对您的
diff1/diff2/diff3列有点困惑,它们看起来与v1-x1等不对应?
标签: r data.table array-difference