这是这个Question的direkt扩展。 我有一个数据集,我想找到这取决于变量X和Y变量v的所有配对组合:在R中使用data.table将多个列添加到data.table中,只用一个函数调用
library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=6), y=c(1,1,6), v=1:18)
x y v
1: a 1 1
2: a 1 2
3: a 6 3
4: a 1 4
5: a 1 5
6: a 6 6
7: b 1 7
8: b 1 8
9: b 6 9
10: b 1 10
11: b 1 11
12: b 6 12
13: c 1 13
14: c 1 14
15: c 6 15
16: c 1 16
17: c 1 17
18: c 6 18
DT[, list(new1 = t(combn(sort(v), m = 2))[,1],
new2 = t(combn(sort(v), m = 2))[,2]),
by = list(x, y)]
x y new1 new2
1: a 1 1 2
2: a 1 1 4
3: a 1 1 5
4: a 1 2 4
5: a 1 2 5
6: a 1 4 5
7: a 6 3 6
8: b 1 7 8
9: b 1 7 10
10: b 1 7 11
11: b 1 8 10
12: b 1 8 11
13: b 1 10 11
14: b 6 9 12
15: c 1 13 14
16: c 1 13 16
17: c 1 13 17
18: c 1 14 16
19: c 1 14 17
20: c 1 16 17
21: c 6 15 18
的代码我想要做什么,但两次函数调用使得它慢了更大的数据集。我的数据集有超过300万行和超过130万个x和y的组合。 有关如何更快地完成此任务的任何建议? 我宁愿是这样的:
DT[, list(c("new1", "new2") = t(combn(sort(v), m = 2))), by = list(x, y)]
我看到两件事情可能会加快这一进程 1.转换数据框到矩阵后重命名列。 2.预先分配内存到'new2'之前的过程 我认为总的来说,你会发现这非常有用 http://stackoverflow.com/questions/2908822/speed-up-the-loop-operation-in- r –
@pops,不同之处在于它是一个'data.table',它不同于'data.frame'(但是它继承了那个类)。 –
您示例数据中的“v”列与您发布的代码不符。哪个是对的? –