>我有一个两列的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 <- DT[,V2/sum(V2),by='V1']
获得V3
,但是行的顺序错误
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(如果我多花30分钟仔细阅读,我问的问题有一半data.table
我本可以自己回答的!
至于新表中的行顺序,我认为您不能轻易保留它。也不清楚为什么你想要保留顺序,除非有另一列已经指示它,在这种情况下,你可以相应地对新表进行排序。