5

この投稿に続いて、のリストの列について別の質問があります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).

回避策はありますか?そうでない場合は、機能のリクエストはどうですか?

4

1 に答える 1

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
于 2013-02-15T14:29:53.640 に答える