/ / आर में, दूसरे डेटा फ्रेम में मूल्यों के अनुमानित संख्यात्मक मिलान के आधार पर डेटा फ्रेम के कॉलम को बनाएं / भरें - आर, मिलान

आर में, दूसरे डेटा फ्रेम में मूल्यों के अनुमानित संख्यात्मक मिलान के आधार पर डेटा फ्रेम के कॉलम को बनाएं / भरें - आर, मिलान

मेरे पास दो डेटा फ्रेम हैं। पहली डेटा फ्रेम में दवाओं की एक सूची होती है जब मैंने उन्हें प्रयोग में देखा था। दूसरे डेटा फ्रेम में मेरे प्रयोग के साथ चलने वाले मानकों की एक सूची है - इसलिए यह उनको देखने के लिए अपेक्षित समय के साथ दवाओं की एक और सूची है।

जो मैं करने की कोशिश कर रहा हूं वह पहले डेटा फ्रेम में सही दवा को सौंपने के लिए सही मानक का नाम प्राप्त कर रहा है।

उदाहरण के लिए, दवा ए को 5.5 मिनट में देखा गया था। ड्रग ए का मानक 5.7 मिनट में देखा जाता है।

ड्रग बी 6 मिनट में मनाया गया था। यह 5.7 मिनट पर ड्रग ए के समान मानक का उपयोग करता है।

ड्रग सी 6.5 मिनट में मनाया गया था। यह एक मानक का उपयोग करता है जो 7 मिनट में देखा जाता है।

मूल डेटा फ्रेम का उदाहरण:

DF1:
Drug   Time
A     5.5
B     6.0
C     6.5

DF2:
Standard   Time
S1        5.7
S2        7

कुंजी यह है कि मैं आर के साथ मानक की तलाश करना चाहता हूँ निकटतम समय (या तो सकारात्मक या नकारात्मक दिशा में) डीएफ 2 में मानकों में से एक के लिए और फिर उस मानक (एस 1, एस 2) का नाम डीएफ 1 को असाइन करें।

अंतिम डेटा फ्रेम का उदाहरण:

Drug   Time   Standard
A      5.5     S1
B      6.0     S1
C      6.5     S2

मुझे पता है कि मैं असाइन किए जाने वाले पूरी तरह से मिलान किए गए मान कैसे प्राप्त कर सकता हूं - लेकिन मुझे यकीन है कि आरएफ को डीएफ 1 में प्रत्येक पंक्ति के लिए डीएफ 2 में निकटतम मूल्य की खोज करने के लिए कैसे करना है।

उत्तर:

उत्तर № 1 के लिए 1

लापरवाही और rbind का उपयोग, एक बहुत साफ दृष्टिकोण। मुझे यकीन है कि हम कुछ dplyr जादू देखेंगे :)

DF1 = read.table(text="Drug   Time
A     5.5
B     6.0
C     6.5",header=TRUE,stringsAsFactors=FALSE)


DF2 = read.table(text="Standard   Time
S1        5.7
S2        7",header=TRUE,stringsAsFactors=FALSE)

प्रत्येक "समय" अवलोकन के लिए हमें न्यूनतम पूर्ण "मानक" अवलोकन मिलता है और डेटा फ्रेम (समय, मानक) सेट होता है।

अंत में, हम rbind के माध्यम से सभी डेटा फ्रेम सेट गठबंधन करते हैं।

DF2$Standard[which.min(abs(DF2$Time - x) )] यह उपर्युक्त स्थिति के साथ "मानक" पाता है

DF3 = do.call(rbind,lapply(DF1$Time,function(x) {
data.frame(Time=x,Standard=DF2$Standard[which.min(abs(DF2$Time - x) )],stringsAsFactors=FALSE)
}))

final_DF = merge(DF1,DF3,by="Time")[,union(names(DF1), names(DF3))
final_DF
#  Drug Time Standard
#1    A  5.5       S1
#2    B  6.0       S1
#3    C  6.5       S2