我目前正在使用一个大约有2亿行的data.table表。
>table
user age
A 19
B 22
C 18
D 13
E 93
F 15
G 11
H 16
I 33
J 25
K 44
L 23
M 76
N 34
O 18
P 32
Q 55
此外,我有一个"索引"表格如下:
> index
row_number count
1 5
3 7
7 12
8 100
12 3
14 4
我的目标是能够将count
列附加到table
。 row_number
列表示table
的行数。因此,当row_number
等于1时,我们将值5附加到用户A和年龄19行table
。对于row_number
等于3,我们将值7插入用户C和年龄18.之间存在间隙,因此我想用0填充它们。
总的来说,我喜欢:
>table
user age count
A 19 5
B 22 0
C 18 7
D 13 0
E 93 0
F 15 0
G 11 12
H 16 100
I 33 0
J 25 0
K 44 0
L 23 3
M 76 0
N 34 4
O 18 0
P 32 0
Q 55 0
到目前为止,我的代码是:
table[,count:= count, by=.N]
但是,我无法得到正确的排序。有谁知道如何在data.table
中完成此任务?谢谢!
答案 0 :(得分:2)
以下是使用set
# set everything to 0
set(table, j = 'count', value = 0)
# replace the appropriate indices with the relevant values
set(table, j = 'count', i = index[['rownumber']], j = index[['count']])
答案 1 :(得分:1)
您也可以使用:=
运算符。你在这里不需要by
。相反,你可以这样做:
table[, count := 0L][index$row_number, count := index$count]
首先,我们使用整数值count
初始化0
,然后对于i
中给出的行号,我们修改 count
{ {1}} 就地,其中包含来自table
的相应count
值。
HTH