2016-07-29 7 views
7

二重変数を使用して因子変数をフィルタリングする方法はありますか?以下R data.tableのdouble変数を使用した因子変数のフィルタリング

例データ:

dt <- data.table(id=1:9, 
       var=factor(81:89)) 

# > dt 
# id var 
# 1: 1 81 
# 2: 2 82 
# 3: 3 83 
# 4: 4 84 
# 5: 5 85 
# 6: 6 86 
# 7: 7 87 
# 8: 8 88 
# 9: 9 89 

なぜこの作品が...

dt[id %in% 1:7 & var %in% c(82, 84)] 

# id var 
# 1: 2 82 
# 2: 4 84 

が...しかし、これはエラーになりますでしょうか?

dt[var %in% c(82, 84)] 

# Error in bmerge(i, x, leftcols, rightcols, io <- FALSE, xo, roll = 0, : 
# x.'var' is a factor column being joined to i.'V1' which is type 'double'. 
# Factor columns must join to factor or character columns.` 

少しばらつきがあり、バグかもしれません。

+0

私は正しい出力を得ています。 – Jaap

+0

同じエラーが発生します:Rバージョン3.3.0(2016-05-03)、data.table_1.9.6 – zx8754

+0

'sessionInfo()'の出力を追加してください。あなたの投稿にこれはdata.table_1.9.7で修正されているようです。 – zx8754

答えて

9

2つ目の例は、自動インデックス作成によって最適化されているため、このエラーがスローされます。

dt[(var %in% c(82, 84))] 
# id var 
#1: 2 82 
#2: 4 84 

次に、ベースRベクトルスキャンが使用され、通常の強制変換規則が適用されます。 help("%in%")から:

Factors, raw vectors and lists are converted to character vectors, and then x and table are coerced to a common type

var <- factor(81:89) 
var %in% c(82, 84) 
#[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 

問題がdata.tableバージョン1.9.7にfixedてきました。

関連する問題