2017-09-25 100 views
1

我有一个data.table,说像这样:data.table减去一个向量

dt = data.table(param_1 = c(1,3,5), param_2 = c(2,4,6)) 
dt 
     param_1 param_2 
1:  1  2 
2:  3  4 
3:  5  6 

和常向量,说这个人:

s = c(1, 0.5) 

,我想计算“矢量减去表”,即s - dt并期望

0 | -1.5 
-2 | -3.5 
-4 | -5.5 

,但我得到

> s - dt 
    param_1 param_2 
1:  0.0 -1.5 
2: -2.5 -3.0 
3: -4.0 -5.5 
> 

所以看起来好像列的顺序是以某种方式随意切换(第一行是好的,但第二行很奇怪!)。如果s是名称与数据表名称相同(按正确顺序)的向量,也会发生这种情况。

如何按预期得到表格?

+1

你如何得到第3行-3.0? – Sotos

+0

@Sotos:你的意思是R给我的结果?我认为它符合 –

+0

以下答案中的提示,所以它是'-3.5',那么你犯了一个错字 – Sotos

回答

2

我们既可以使用Map

dt[, Map(`-`, s, .SD)] 

或复制的“,使长度相同,从“DT”

s[col(dt)] - dt 

注意加减,当我们减去从数据vector。帧或data.table,减法按列顺序进行,即减去第一列的所有元素,然后转到第二列,依此类推。什么情况是,有一个简单的减法

s - dt 

“S”的第一个元素会从第1列,“DT”的第1行中扣除,则“S”的第二个元素从1日的第二个元素减去柱。由于回收,这与向量重复和输出是不同的

+1

有意义,你的解决方案似乎有效。谢谢 :-) –