2014-01-08 151 views
2

提取最佳屬性我有一個data.table從data.table

> (a <- data.table(id=c(1,1,1,2,2,3), 
        attribute=c("a","b","c","a","b","c"), 
        importance=1:6, 
        key=c("id","importance"))) 
    id attribute importance 
1: 1   a   1 
2: 1   b   2 
3: 1   c   3 
4: 2   a   4 
5: 2   b   5 
6: 3   c   6 

我想:

--1--第二個鍵來排序遞減秩序(即最重要的屬性應該優先)

- 2 -選擇頂部 2(或10)的屬性爲每個id,即:

id attribute importance 
3: 1   c   3 
2: 1   b   2 
5: 2   b   5 
4: 2   a   4 
6: 3   c   6 

--3--樞軸以上:

id attribute.1 importance.1 attribute.2 importance.2 
1   c   3   b   2 
2   b   5   a   4 
3   c   6   NA   NA 

看來,最後的操作可以與像進行:

a[,{ 
    tmp <- .SD[.N:1]; 
    list(a1 = tmp$attribute[1], 
     i1 = tmp$importance[1]) 
}, by=id] 

這是正確的方法嗎?

我該如何做前兩個任務?

回答

3

我會做前兩項任務是這樣的:

a[a[, .I[.N:(.N-1)], by=list(id)]$V1] 

a[, .I[.N:(.N-1)], ,by=list(id)]讓你在你需要在每id組獨特的順序指數。然後,您將子集aV1列(其索引按您需要的順序排列)組合。

你要在這裏照顧負指數的,也許是這樣的:

a[a[, .I[seq.int(.N, max(.N-1L, 1L))], by=list(id)]$V1]