如何通过data.table中的列列进行键入

时间:2013-02-15 13:43:33

标签: r data.table

关注this post,我对data.table中的列列还有另一个问题。

DT = data.table(x=list(c(1,2),c(1,2),c(3,4,5)))

似乎你无法键入一列列表。

DT[,y:=.I,by=x]
Erreur dans `[.data.table`(DT, , `:=`(y, .I), by = x) :
  The items in the 'by' or 'keyby' list are length (2,2,3). Each must be same length as rows in x or number of rows returned by i (3).

我以为我可以使用相同长度的列表但是:

DT = data.table(x=list(c(1,2),c(1,2),c(3,5)))
DT[,y:=.I,by=x]
Erreur dans `[.data.table`(DT, , `:=`(y, .I), by = x) :
  The items in the 'by' or 'keyby' list are length (2,2,2). Each must be same length as rows in x or number of rows returned by i (3).

有解决方法吗?如果不是功能请求呢?

1 个答案:

答案 0 :(得分:3)

我会做这样的事情作为解决方法:

DT[, y := which(DT$x %in% x), by = 1:nrow(DT)]

这将始终返回第一个匹配的索引,它将作为组ID。

你应该这样做:

DT[, psnInGrp := seq_along(x), by=y]

#        x y psnInGrp
# 1:   1,2 1        1
# 2:   1,2 1        2
# 3: 3,4,5 3        1