我有一个 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,我本可以回答自己的!)至于新表中的行序,我认为你不能轻易保留它。
也不清楚为什么要保留顺序,除非已经有另一列规定了顺序,在这种情况下,您可以相应地对新表进行排序。
关于r - 根据另一列修改data.table的列并添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22788113/