r语言 - 基于另一列修改 data.table 的列并添加新列



>我有一个两列的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我本可以自己回答的!

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

最新更新