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))




dplyr