data.table
पैकेज एसक्यूएल के समान टेबल हैंडलिंग विधियों को प्रदान करता है। यदि किसी तालिका में कुंजी है, तो उस कुंजी में एक या अधिक कॉलम होते हैं। लेकिन एक तालिका में एक से अधिक कुंजी नहीं हो सकती है, क्योंकि इसे एक ही समय में दो अलग-अलग तरीकों से हल नहीं किया जा सकता है।एसक्यूएल अनुवाद करना आरटीटीटीई सिंटैक्स
इस उदाहरण में, X
और Y
data.table
एस एक एकल कुंजी कॉलम "आईडी" के साथ हैं; Y
में एक गैर-कुंजी कॉलम "x_id" भी है।
X <- data.table(id = 1:5, a=4:8,key="id")
Y <- data.table(id = c(1,1, 3,5,7), x_id=c(1,4:1), key="id")
निम्न सिंटैक्स अपनी चाबी पर तालिकाओं में शामिल हो जाएगा:
X[Y]
मैं कैसे data.table कोड के लिए निम्न SQL सिंटैक्स अनुवाद कर सकते हैं?
select * from X join Y on X.id = Y.x_id;
करीबी है कि मैं मिल गया है है:
Y[X,list(id, x_id),by = x_id,nomatch=0]
हालांकि, इस एसक्यूएल बयान के रूप में एक ही भीतरी में शामिल होने नहीं करता है।
यहाँ एक और अधिक स्पष्ट उदाहरण है, जिसमें विदेशी कुंजी y_id है है, और हम Y2 जहां X2$y_id = Y2$id
के मूल्यों को देखने के लिए में शामिल होने के लिए चाहते हैं।
X2 <- data.table(id = 1:5, y_id = c(1,1,2,2,2), key="id")
Y2 <- data.table(id = 1:5, b = letters[1:5], key="id")
मैं तालिका का उत्पादन करना चाहते हैं:
id y_id b
1 1 "a"
2 1 "a"
3 2 "b"
4 2 "b"
5 2 "b"
क्या निम्नलिखित kludge द्वारा किया जाता है के समान:
> merge(data.frame(X2), data.frame(Y2), by.x = "y_id", by.y = "id")
y_id id b
1 1 1 a
2 1 2 a
3 2 3 b
4 2 4 b
5 2 5 b
हालांकि, मैं यह कर जब:
X2[Y2, 1:2,by = y_id]
मुझे वांछित परिणाम नहीं मिलते हैं:
y_id V1
[1,] 1 1
[2,] 1 2
[3,] 2 1
[4,] 2 2
आप अस्थायी रूप से 'बदल सकते हैं X2' कुंजी और उन्हें स्थापित करने के लिए' "y_id" '; फिर दिशा के आधार पर 'वाई 2 [एक्स 2] '(या' एक्स 2 [वाई 2] 'में सामान्य जुड़ें) और फिर' X2' की पिछली कुंजी को पुनर्स्थापित करें। – digEmAll
@digEmAll जो उपयोगी है, मैंने सोचा था कि 'by' तर्क क्या था ... लेकिन क्या इसे एकाधिक (> 2) तालिका में लागू किया जा सकता है जहां लक्ष्य (बाएं) तालिका में> 1 विदेशी कुंजी है? –
मैं @digEmAll से सहमत हूं: 'setkey (X2, y_id) 'के बाद' X2 [Y2, nomatch = 0]' आपको अपने उदाहरण के लिए आवश्यक है। और यह कई चाबियों के साथ भी काम करना चाहिए। हालांकि, मैं एसक्यूएल में विदेशी कुंजी वाक्यविन्यास से वास्तव में परिचित नहीं हूं, इसलिए यदि आप अधिक चाबियों से जूझ रहे हैं, तो क्या आप अपना उदाहरण बढ़ा सकते हैं? –