2013-10-18 11 views
10

मैं डेटाटेबल का उपयोग करके एक पूर्ण कार्टेशियन जुड़ने की कोशिश कर रहा हूं लेकिन थोड़ी किस्मत के साथ।कार्टेशियन डेटाटेबल में शामिल हों

कोड:


a = data.table(dt=c(20131017,20131018)) 
setkey(a,dt) 

b = data.table(ticker=c("ABC","DEF","XYZ"),ind=c("MISC1","MISC2","MISC3")) 
setkey(b,ticker) 

अपेक्षित उत्पादन:

merge(data.frame(a),data.frame(b),all.x=TRUE,all.y=TRUE) 

मैं merge(a,b,allow.cartesian=TRUE) की कोशिश की है, लेकिन यह मुझे त्रुटि निम्न देता है - "Error in merge.data.table(a, b, allow.cartesian = TRUE) : A non-empty vector of column names foris required. द्वारा"

मैं नवीनतम data.table पैकेज के साथ "R version 3.0.1 (2013-05-16)" का उपयोग कर रहा हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा!

सादर

+2

यह और अधिक एक 'merge'-समस्या से एक' expand.grid' की तरह समस्या की तरह लग रहा है। आपके पास कोई सामान्य चर नहीं है। –

+0

कार्टेजियन द्वारा मर्ज फ़ंक्शन का उपयोग करके आवश्यक आउटपुट प्राप्त किया जाता है लेकिन यह डेटा.फ्रेम पर काम करता है और यदि संभव हो तो मैं डेटाटेबल समाधान की तलाश में हूं। – Manoj

+1

मैं आमतौर पर एक डमी चर जोड़ता हूं, उस चर द्वारा विलय करता हूं, और 'allow.cartesian = TRUE' है। 'सीजे' और 'expand.grid' वैक्टर में शामिल हो सकते हैं लेकिन मुझे दो टेबलों का क्रॉस-जॉइन बनाने के लिए कभी भी बेस फ़ंक्शन नहीं मिल सका। क्या कोई इस तरह के एक समारोह को इंगित कर सकता है, यदि यह मौजूद है? – TheComeOnMan

उत्तर

0

@Codoremifa पर विस्तार:

> dt <- c(20131017,20131018) 
> b <- data.table(ticker=c("ABC","DEF","XYZ"), ind=c("MISC1","MISC2","MISC3"), key="ticker") 
> b[CJ(ticker=ticker, dt=dt)][, c(3, 1, 2), with=F] 
     dt ticker ind 
1: 20131017 ABC MISC1 
2: 20131018 ABC MISC1 
3: 20131017 DEF MISC2 
4: 20131018 DEF MISC2 
5: 20131017 XYZ MISC3 
6: 20131018 XYZ MISC3 

अच्छे नहीं होगा अगर एक भी आदेश यह करना होगा, लेकिन यह अपेक्षाकृत आसान है।

19

मुझे लगता है कि एक बेहतर समाधान है:

a[,as.list(b),by=dt] 

     dt ticker ind 
1: 20131017 ABC MISC1 
2: 20131017 DEF MISC2 
3: 20131017 XYZ MISC3 
4: 20131018 ABC MISC1 
5: 20131018 DEF MISC2 
6: 20131018 XYZ MISC3 
+0

+1 चालाक समाधान। – Arun

+0

बिल्कुल सही - यह एक अच्छा साथी है! – Manoj

+0

यह बहुत उपयोगी है। मैं भी काम करने के लिए एक कार्टशियन शामिल नहीं हो सका। – drstevok

संबंधित मुद्दे