gpt4 book ai didi

r - 根据另一列修改data.table的列并添加新列

转载 作者:行者123 更新时间:2023-12-01 01:01:37 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com