在R中的`data.table`中,有没有办法根据索引快速为行分配值?

时间:2014-10-01 21:40:07

标签: r data.table

我目前正在使用一个大约有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列附加到tablerow_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中完成此任务?谢谢!

2 个答案:

答案 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