根据
我的问题是如何一次性访问所有列?
例子:
我可以做以下操作,但这仅因为我知道列名为
那么如果有100个列怎么办呢?
?data.table
的说明,在使用 x[i,j]
时,其中 i
是一个 data.table
,可以通过 i.column
在 j
中访问 i
的列。我的问题是如何一次性访问所有列?
例子:
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
现在,假设我想要将DT
的列B
与DT2
的列B
相乘,对于每个匹配列A
的值进行操作。
0.82122120 * 1.3586796
0.59390132 * 1.3586796
...
我可以做以下操作,但这仅因为我知道列名为
B
和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