के साथ एक data.table शामिल होने के लिए कैसे एक उदाहरण मामले यहाँ है:एकाधिक स्तंभों और एक से अधिक मान
DT = data.table(x=1:4, y=6:9, z=3:6)
setkey(DT, x, y)
जुड़ें कॉलम अधिक मान:
xc = c(1, 2, 4)
yc = c(6, 9)
DT[J(xc, yc), nomatch=0]
x y z
1: 1 6 3
J()
रिटर्न केवल एकल पंक्ति का यह प्रयोग । असल में, मैं %in%
ऑपरेटर के रूप में शामिल होना चाहता हूं।
DT[x %in% xc & y %in% yc]
x y z
1: 1 6 3
2: 4 9 6
लेकिन %in%
ऑपरेटर का उपयोग खोज एक सदिश स्कैन जो द्विआधारी खोज की तुलना में बहुत धीमी है बनाता है।
xc2 = rep(xc, length(yc))
yc2 = unlist(lapply(yc, rep, length(xc)))
DT[J(xc2, yc2), nomatch=0]
x y z
1: 1 6 3
2: 4 9 6
लेकिन इमारत XC2, इस तरह से yc2 कोड को पढ़ने के लिए कठिन बना देता है: आदेश द्विआधारी खोज करने के लिए, मैं में शामिल होने के मूल्यों के हर संभव संयोजन का निर्माण। इस मामले में %in%
ऑपरेटर की बाइनरी खोज और सादगी की गति रखने का कोई बेहतर तरीका है?
मुझे लगता है कि आप * क्रॉस जॉइन * की तलाश में हैं * - जो कार्य 'सीजे' है। 'डीटी [सीजे (एक्ससी, वाईसी), नामांकन = 0 एल] 'आज़माएं। इसे उत्तर के रूप में पोस्ट करने के लिए स्वतंत्र महसूस करें (यदि सही है) और इसे स्वीकार करें। – Arun