2015-10-15 33 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