2015-10-15 32 views
1

我在R中有一个data.table对象,我想沿它的键分割。在R中用键分割data.table

>myTable[1:11] 
    ID  length hash 
1: 2578 52.5 26566273 
2: 4066 52.5 26566273 
3: 2578 53.5 26566273 
4: 4066 53.5 26566273 
5: 2207 29.5 54352910 
6: 3719 29.5 54352910 
7: 5166 9.5 613353882 
8: 5167 9.5 613353882 
9: 5169 9.5 613353882 
10:5170 9.5 613353882 
11:5171 9.5 613353882 

first_hash和长度是我的2个键 输出我想是的列表中ID列的每个关键

所以它可能是一些看起来像

first_hash length ID_list 
26566273 52.5 [1] 2578 4066 
26566273 53.5 [1] 2578 4066 
54352910 29.5 [1] 2207 3719 
613353882 9.5 [1] 5166 5167 5168 5169 5170 5171 

或某种清单...

我认为plyr可以给这个答案一些,但我更喜欢data.table的方式

的最终目标是创建所有对ID具有相同的密钥 我是知道的功能expand.grid

感谢

回答

2

我们通过“散”和“长度”并把“ID组'在list

DT <- myTable[,list(ID_list=list(ID)) , by =.(first_hash=hash, length)] 
DT 
# first_hash length     ID_list 
#1: 26566273 52.5    2578,4066 
#2: 26566273 53.5    2578,4066 
#3: 54352910 29.5    2207,3719 
#4: 613353882 9.5 5166,5167,5169,5170,5171 

str(DT) 
# Classes ‘data.table’ and 'data.frame': 4 obs. of 3 variables: 
# $ first_hash: int 26566273 26566273 54352910 613353882 
# $ length : num 52.5 53.5 29.5 9.5 
# $ ID_list :List of 4 
# ..$ : int 2578 4066 
# ..$ : int 2578 4066 
# ..$ : int 2207 3719 
# ..$ : int 5166 5167 5169 5170 5171 

或者正如@Frank提到的,我们可以paste的 'ID' 按组以创建一个列,而不是一个list

myTable[,list(ID_list= toString(ID)) , by =.(first_hash=hash, length)] 
+1

'toString'是另一种常见的建议。惊讶,我找不到一个笨蛋。 – Frank

+1

@Frank谢谢。我会更新 – akrun