2014-01-08 3 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 

내가 원하는 다음 의 두 번째 키에 의해

--1489-- 종류가 내림차순 (즉, 가장 중요한 속성이 먼저 와야합니다.)

--2-- 을 선택하십시오.위의

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

--3-- 피벗 :3210 2 (또는 10) 즉, 각 id 속성

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

I는 다음과 같이 처음 두 개의 작업을 할 거라고 :

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

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

는 당신에게 당신이 id의 모든 고유 그룹에 필요한 순서대로 인덱스를 제공합니다. 그런 다음 V1 열 (필요한 순서로 색인이 있음)을 사용하여 a의 하위 집합을 만듭니다.

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

당신은 아마 뭔가처럼 여기 부정적인 지표 알아서해야합니다