as per ?data.table
使用时x[i,j]
where i
is a data.table
,列i
可以通过以下方式访问i.column
in j
。
我的问题是如何一次访问所有列?
Example:
library(data.table)
set.seed(1L)
DT <- data.table(A=c('a','a','b','b','c','c'),
B=rnorm(6L),
C=rnorm(6L),
key='A')
# A B C
#1: a 0.82122120 0.61982575
#2: a 0.59390132 -0.05612874
#3: b 0.91897737 -0.15579551
#4: b 0.78213630 -1.47075238
#5: c 0.07456498 -0.47815006
#6: c -1.98935170 0.41794156
DT2 <- data.table(A=c('a','b','c'),
B=rnorm(3L),
C=rnorm(3L),
key='A')
# A B C
#1: a 1.3586796 -0.05380504
#2: b -0.1027877 -1.37705956
#3: c 0.3876716 -0.41499456
现在假设我想乘以列B
of DT
按数量B
of DT2
对于列的每个匹配值A
。
也就是说
0.82122120 * 1.3586796
0.59390132 * 1.3586796
...
我可以执行以下操作,但只是因为我知道这些列被称为B
and C
,而且因为我有足够的耐心来写所有的专栏。
例如,我如何对 100 列做类似的事情?
DT[DT2,{print(as.matrix(.SD) %*% diag(c(i.B,i.C)))},by=.EACHI]
[,1] [,2]
[1,] 1.1157764 -0.033349750
[2,] 0.8069216 0.003020009
[,1] [,2]
[1,] -0.09445960 0.2145397
[2,] -0.08039401 2.0253136
[,1] [,2]
[1,] 0.02890673 0.1984297
[2,] -0.77121518 -0.1734435