假设我有一个这样的data.表(假设它有许多列,如“a1,...,a100,...”和类似的“b1,...,b100,...”)
dt <- data.table(id = 1:5, a1 = runif(5), a2 = runif(5), b1 = runif(5), b2 = runif(5))
因此输出如下所示:
id a1 a2 b1 b2
1: 1 0.94431156 0.34668771 0.54899478 0.91512664
2: 2 0.32730005 0.87924651 0.88777763 0.90167832
3: 3 0.07438915 0.53728539 0.21463741 0.11291512
4: 4 0.23025893 0.08528074 0.68454936 0.45441690
5: 5 0.86105462 0.49976703 0.07362091 0.08834252
我想创建新列c1, c2
,这样我就可以有效地
dt[, c('c1', 'c2') := .(a1*b1, a2*b2)]
带输出
id a1 a2 b1 b2 c1 c2
1: 1 0.94431156 0.34668771 0.54899478 0.91512664 0.51842212 0.31726316
2: 2 0.32730005 0.87924651 0.88777763 0.90167832 0.29056966 0.79279752
3: 3 0.07438915 0.53728539 0.21463741 0.11291512 0.01596669 0.06066765
4: 4 0.23025893 0.08528074 0.68454936 0.45441690 0.15762361 0.03875301
5: 5 0.86105462 0.49976703 0.07362091 0.08834252 0.06339162 0.04415068
如何在不使用慢速循环的情况下实现这一点?
3条答案
按热度按时间hmmo2u0o1#
因为矩阵乘法在R中是元素级的,所以可以执行以下操作:
输出量
wr98u20j2#
考虑到@GoldenGateBridge的回答,假设你不知道你的table可以有多大,你可以用下面的形式概括:
我希望它有用。
zhte4eai3#
我们可以尝试
split.defult
按列名拆分dt
,然后依次执行元素乘法