5

順序付けられた因子でrbind2 つを ingすると、順序付けが失われたように見えます。data.table

dtb1 = data.table(id = factor(c("a", "b"), levels = c("a", "c", "b"), ordered=T), key="id")
dtb2 = data.table(id = factor(c("c"), levels = c("a", "c", "b"), ordered=T), key="id") 
test = rbind(dtb1, dtb2)
is.ordered(test$id)
#[1] FALSE

考えやアイデアはありますか?

4

3 に答える 3

1

バージョン 1.8.11 の時点で、グローバル順序が存在する場合data.tableは順序付けられた要素を結合しordered、存在しない場合は不平を言って要素になります。

DT1 = data.table(ordered('a', levels = c('a','b','c')))
DT2 = data.table(ordered('a', levels = c('a','d','b')))

rbind(DT1, DT2)$V1
#[1] a a
#Levels: a < d < b < c

DT3 = data.table(ordered('a', levels = c('b','a','c')))
rbind(DT1, DT3)$V1
#[1] a a
#Levels: a b c
#Warning message:
#In rbindlist(lapply(seq_along(allargs), function(x) { :
#  ordered factor levels cannot be combined, going to convert to simple factor instead

対照的に、ベース R の機能は次のとおりです。

rbind(data.frame(DT1), data.frame(DT2))$V1
#[1] a a
#Levels: a < b < c < d
# Notice that the resulting order does not respect the suborder for DT2

rbind(data.frame(DT1), data.frame(DT3))$V1
#[1] a a
#Levels: a < b < c
# Again, suborders are not respected and new order is created
于 2013-10-27T20:51:47.767 に答える