2014-10-01 58 views
0

我目前正在使用一個大約有2億行的data.table表。在R中的`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

下面是使用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

您還可以使用:=操作的方法。您在這裏不需要by。相反,你會做得一樣:

table[, count := 0L][index$row_number, count := index$count] 

首先我們初始化count與整數值0,然後在i給出的行號,我們修改counttable就地與相應的count值從index

HTH

+0

非常感謝,這是純粹的天才!在另一個說明中,我想知道是否有一個我自己可以找到或創建的tar.gz版本的data.table 1.9.3。謝謝! – user1398057 2014-10-02 09:30:05

+0

也許你可以從[項目頁面](https://github.com/Rdatatable/data.table)下載zip版本,解壓縮並使用'R CMD BUILD'?無論如何,Matt已經推出了'data.table 1.9.4'到CRAN,它應該很快就會在那裏。 – Arun 2014-10-02 09:32:37

相關問題