R 从data.table中提取最佳属性

R 从data.table中提取最佳属性,r,data.table,R,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:

我有一个
数据。表

> (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
--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]
a[a[, .I[seq.int(.N, max(.N-1L, 1L))], by=list(id)]$V1]
a[,{

tmp我会像这样做前两项任务:

a[a[, .I[.N:(.N-1)], by=list(id)]$V1]
内部的
a[,.I[.N:(.N-1)],by=list(id)]
id
中的每个唯一组提供所需的索引。然后使用
V1
列对
a
进行子集化(该列的索引顺序与所需的顺序相同)

在这里,你必须注意负指数,比如:

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