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']