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]