我有一个带有两列的data.table
DT
V1 V2
1: 1 3
2: 2 4
3: 3 5
4: 2 2
5: 3 8
6: 1 4
7: 2 5
对于每一行,我要使用具有相同
V1
的所有条目并添加V2
条目,然后将V2
条目除以该总和并添加到第三列。例如,在第1行第3列中,答案应为3 /(3 + 4)。在第2行第3列中,答案应为4 /(4 + 2 + 5),依此类推。最终我应该有
V1 V2 V3
1: 1 3 0.4285714
2: 2 4 0.3636364
3: 3 5 0.3846154
4: 2 2 0.1818182
5: 3 8 0.6153846
6: 1 4 0.5714286
7: 2 5 0.4545455
我可以通过
V3
获取q <- DT[,V2/sum(V2),by='V1']
,但是行的顺序错误 V1 V1
1: 1 0.4285714
2: 1 0.5714286
3: 2 0.3636364
4: 2 0.1818182
5: 2 0.4545455
6: 3 0.3846154
7: 3 0.6153846
因此仅将
q
的第二列粘贴到DT
将不起作用。而且,data.table
q
现在有些尴尬,有两列具有相同的名称,V1
。几天来,我一直在努力思考这个问题,经过高空搜寻,仍然找不到简单的答案。任何帮助将非常感激。
最佳答案
使用创建一个新表
DT[,list(V2=V2, V3=V2/sum(V2)), by='V1']
(具有修改的行顺序)或使用赋值运算符在适当位置修改
data.table
:DT[, V3 := V2/sum(V2), by='V1']
请注意,现在行顺序是相同的。
请RTFM(我问有关
data.table
的一半问题,如果我再花30分钟仔细阅读it,我本可以回答自己的!)至于新表中的行顺序,我认为您不能轻易保留它。
还不清楚为什么您要保留订单,除非已经有另一列对此进行了规定,在这种情况下,您可以对新表格进行相应的排序。