R 基于另一列修改data.table的列并添加新列

R 基于另一列修改data.table的列并添加新列,r,data.table,R,Data.table,我有一个带有两列的data.tableDT 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

我有一个带有两列的
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
我可以通过
q获得
V3
使用

DT[,list(V2=V2, V3=V2/sum(V2)), by='V1']
(使用修改的行顺序)或使用赋值运算符就地修改
数据表

DT[, V3 := V2/sum(V2), by='V1'] 
请注意,现在行顺序相同

请(我问的关于
data.table
的一半问题,如果我多花30分钟仔细阅读,我本可以自己回答的!)

至于新表中的行顺序,我认为您不能轻易地保留它。
也不清楚为什么要保留顺序,除非已经有另一列指定了顺序,在这种情况下,您可以对新表进行相应排序。

首先感谢您的回答!这至少是因为计算被正确地追加了。如果可以的话,为什么会这样?一个小问题是行的顺序错误。我想我可以通过在新列中添加行号和排序来解决后一个问题。但是,是否有“一步”解决方案?请参见编辑:分组需要排序才能有效。
DT[, V3 := V2/sum(V2), by='V1']