क्या कई कॉलम या कंपोजिट कुंजी पर जुड़ सकते हैं?


111

मुझे पता है कि dplyrv3.0 आपको विभिन्न चर पर शामिल होने की अनुमति देता है:

left_join(x, y, by = c("a" = "b")मिलान कर देंगे x.aकरने के लिएy.b

हालांकि, क्या चर के संयोजन पर शामिल होना संभव है या क्या मुझे पहले से एक समग्र कुंजी जोड़ना है?

कुछ इस तरह:

left_join(x, y, by = c("a c" = "b d")[ x.aऔर x.c] के [ y.bऔर y.d] के संयोजन से मेल खाने के लिए

जवाबों:


199

टिबबल का उपयोग करने के लिए अद्यतन ()

आप करने के लिए 1 से लंबाई अधिक से अधिक के एक नामित वेक्टर पारित कर सकते हैं byके तर्क left_join():

library(dplyr)

d1 <- tibble(
  x = letters[1:3],
  y = LETTERS[1:3],
  a = rnorm(3)
  )

d2 <- tibble(
  x2 = letters[3:1],
  y2 = LETTERS[3:1],
  b = rnorm(3)
  )

left_join(d1, d2, by = c("x" = "x2", "y" = "y2"))

5
इसके लिए धन्यवाद; यह भी काम करता है जब डेटा फ्रेम में कॉलम का नाम समान होता है, जैसे left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname"))। कुछ के लिए स्पष्ट नहीं हो सकता है।
एंथनी साइमन मिलेनिकज़ुक

10
जब ज्वाइन कॉलम समान हों, तो आप भी इससे बच सकते हैं =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders

2
ऊओफ़ ... मैं घर से बाहर था, लेकिन ... यह एक और प्रतीत होता है ... जो मुझे लगता है कि समझ में आता है, लेकिन मैं उम्मीद कर रहा था कि यह एक x = x2 या y = y2 होगा, क्योंकि मेरे पास कई सूचकांक हैं असमान संसाधनों में डुप्लिकेट लेकिन क्षतिग्रस्त प्रविष्टियों की पहचान करने की कोशिश करने के लिए बनाया गया है।
जोशुआ एरिक टरकोटे

नामों का समान होना जरूरी नहीं है, बस इसी डेटाफ्रेम में मान्य स्तंभ नाम होना चाहिए अर्थात एक में "fname" और दूसरा "Firstname" हो सकता है और यह ठीक काम करेगा।
सैन इमैनुएल जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.