我有一个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
via 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
to DT
不管用。另外,有点尴尬的是data.table
q
现在有两列同名,V1
.
这几天我一直在思考这个问题,到处搜索,但仍然无法想出一个简单的答案。任何帮助将非常感激。
创建一个new表使用
DT[,list(V2=V2, V3=V2/sum(V2)), by='V1']
(修改行顺序)或modify the data.table
使用赋值运算符就位:
DT[, V3 := V2/sum(V2), by='V1']
请注意,现在行顺序是相同的。
Please RTFM http://datatable.r-forge.r-project.org/(我问的问题有一半是data.table
如果我多花 30 分钟阅读,我就能自己回答it http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf!)
至于新表中的行顺序,我认为您无法轻松保留它。
还不清楚为什么您想要保留顺序,除非已经有另一列指定了顺序,在这种情况下您可以相应地对新表进行排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)