2016-07-29 15 views
7

में डबल चर का उपयोग कर कारक चर पर फ़िल्टरिंग मैं एक मामले में एक डबल चर का उपयोग कर एक कारक चर फ़िल्टर कैसे कर सकता हूं, लेकिन दूसरे में नहीं?आर डेटाटेबल

नीचे उदाहरण डेटा:

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

मुझे एक ही त्रुटि मिल रही है: आर संस्करण 3.3.0 (2016-05-03), data.table_1.9.6 – zx8754

+0

कृपया 'sessionInfo()' आपकी पोस्ट के लिए ऐसा लगता है कि यह data.table_1.9.7 में तय है। – zx8754

उत्तर

9

अंतर यह है कि दूसरा उदाहरण स्वचालित अनुक्रमण द्वारा अनुकूलित किया गया है, जो इस त्रुटि को फेंकता है। आप इस सुविधा को इस तरह से बंद कर सकते हैं:

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

फिर आधार आर वेक्टर स्कैन का उपयोग किया जाता है और सामान्य जबरन नियम लागू होते हैं। 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 किया गया है।