r - आंतरिक आर में स्थितियों के साथ जुड़ें
merge inner-join (2)
मैं शर्त के साथ अंदरूनी प्रवेश करना चाहता हूं कि मुझे 2 कॉलम की घटा देना चाहिए।
df1 = data.frame(Term = c("T1","T2","T3"), Sec = c("s1","s2","s3"), Value =c(10,30,30))
df2 = data.frame(Term = c("T1","T2","T3"), Sec = c("s1","s3","s2"), Value =c(40,20,10)
df1
Term Sec Value
T1 s1 10
T2 s2 30
T3 s3 30
df2
Term Sec Value
T1 s1 40
T2 s3 20
T3 s2 10
मैं चाहता हूँ कि परिणाम है
Term Sec Value
T1 s1 30
T2 s2 20
T3 s3 10
असल में मैं दो तालिकाओं में शामिल हो रहा हूं और स्तंभ मूल्य के लिए जो मैं ले रहा हूं
Value= abs(df1$Value - df2$Value)
मुझे संघर्ष करना है, लेकिन आधार आर में इस सशर्त मर्ज करने के लिए कोई रास्ता नहीं मिला। संभवतः यदि आधार आर के साथ संभव नहीं है, तो dointr को ऐसा करने में सक्षम होना चाहिए अंदर () लेकिन मुझे इस पैकेज के बहुत से जानकारी नहीं है
इसलिए, आधार आर और / या डीप्टर के साथ कोई सुझाव की सराहना की जाएगी
संपादन
मैंने पूछा है कि मेरे मूल डेटा को शामिल किया है। मेरा डेटा यहां है
https://jsfiddle.net/6z6smk80/1/
डीएफ 1 पहली तालिका है और डीएफ 2 दूसरा है। डीएफ 2 168 वीं पंक्ति से शुरू होता है
सभी तर्क एक ही है, मैं इन दो तालिकाओं में शामिल होना चाहता हूँ, जिनकी लंबाई 160 पंक्तियों में से प्रत्येक है। मैं आईडी से जुड़ना चाहता हूं और दोनों तालिकाओं से कॉलम मूल्य का अंतर लेना चाहता हूं। परिणामी डेटासेट में पंक्तियों की एक ही संख्या होनी चाहिए जो कि 160 अतिरिक्त कॉलम अंतर है
आपके मूल df1
और df2
डेटा फ़्रेम द्वारा साझा Term
कॉलम पर merge()
फ़ंक्शन का उपयोग करके यह एक "बेस आर" समाधान है:
df_merged <- merge(df1, df2, by="Sec")
df_merged$Value <- abs(df_merged$Value.x - df_merged$Value.y)
df_merged <- df_merged[, c("Sec", "Term.x", "Value")]
names(df_merged)[2] <- "Term"
> df_merged
Sec Term Value
1 s1 T1 30
2 s2 T2 20
3 s3 T3 10
चूंकि यह एक dplyr प्रश्न है, यहाँ एक dplyr समाधान है:
पहले inner_join
- inner_join
उपयोग inner_join
और फिर वेरिएबल्स रखने के लिए transmute
करें और एक नया inner_join
जोड़ें।
inner_join(df1, df2, by = "Sec") %>%
transmute(Term = Term.x, Sec, Value = abs(Value.x - Value.y))