मेरे पास नीचे 2 डेटाफ्रेम हैं:
Names<-c("Max","Helen","Bob","Eva")
Id<-c(1,2,3,4)
LISTN<-data.frame(Names,Id)
Name1<-c("Max","Bob")
Name2<-c("Helen","Eva")
PAIRS<-data.frame(Name1,Name2)
मैं PAIRS
के कॉलम Name1
और Name2
के मानों को LISTN
में पाए गए संबंधित Id
से बदलना चाहता हूं। परिणाम इसकी तरह दिखना चाहिए:
Name1 Name2
1 1 2
2 3 4
1
firmo23
16 जिंदा 2019, 00:25
2 जवाब
सबसे बढ़िया उत्तर
मैं match
का उपयोग करके दो तरीकों के बारे में सोच सकता हूं, एक फ़ंक्शन जिसे ऑर्डर किए गए मानों को अनुक्रमण स्थितियों में परिवर्तित करने के लिए डिज़ाइन किया गया है:
> sapply(PAIRS, match, LISTN$Names) # returns matrix
Name1 Name2
[1,] 1 2
[2,] 3 4
> as.data.frame(lapply(PAIRS, match, LISTN$Names)) # returns dataframe
Name1 Name2
1 1 2
2 3 4
यदि नाम पहले से क्रमिक रूप से आदेशित नहीं किए गए थे, तो आपको पहले उस पर ध्यान देना होगा।
3
IRTFM
16 जिंदा 2019, 00:32
tidyverse
के साथ आप यह कर सकते हैं:
PAIRS %>%
rowid_to_column() %>%
gather(var, val, -rowid) %>%
left_join(LISTN, by = c("val" = "Names")) %>%
select(-val) %>%
spread(var, Id) %>%
select(-rowid)
Name1 Name2
1 1 2
2 3 4
यह PAIRS df को वाइड से लॉन्ग फॉर्मेट में बदल रहा है, इसे नामों पर LISTN df के साथ मर्ज कर रहा है और फिर इसे "Id" के मानों के साथ वाइड फॉर्मेट में बदल रहा है।
1
tmfmnk
16 जिंदा 2019, 00:37