के भीतर निकटतम मूल्य ढूँढना मैं प्रत्येक इलाज वाले अवलोकनों के लिए निकटतम मूल्य खोजने का प्रयास कर रहा हूं। डेटा के रूप में (1.2M ओ बीएस से एक आंशिक डेटा) इस प्रकार देखो:डेटा.table
> dta
id treatment score
1: 5 0 0.02381024
2: 10 0 0.05428605
3: 22 0 0.02118124
4: 27 0 0.01495214
5: 45 0 0.01877916
6: 50 0 0.02120360
7: 58 0 0.02207263
8: 60 0 0.02807019
9: 61 0 0.05432927
10: 65 1 0.59612077
11: 68 0 0.02482168
12: 72 1 0.14582400
13: 73 0 0.02371670
14: 77 0 0.02608826
15: 87 0 0.06852409
16: 88 0 0.07473471
17: 94 0 0.07160314
18: 97 0 0.02040747
19: 104 1 0.09878789
20: 108 0 0.02421807
प्रत्येक इलाज किया टिप्पणियों के लिए (यानी, उपचार = 1) मैं एक अनुपचारित अवलोकन प्राप्त करना चाहते हैं (यानी, उपचार = 0) के साथ निकटतम स्कोर और चुने हुए अवलोकन को अन्य इलाज अवलोकनों के मिलान के लिए अपरिहार्य के रूप में चिह्नित करें।
उदाहरण के लिए, पहले इलाज अवलोकन (पंक्ति 10) आईडी = 88 (पंक्ति 16), पंक्ति 12 से पंक्ति 17 तक मेल खाएगा, और इसी तरह।
smpl_treated = dta[treatment == 1]
smpl_untreated = dta[treatment == 0]
n_tmp = nrow(smpl_treated)
matched_id = matrix(0, n_tmp, 1)
smpl_tmp = smpl_untreated
for (i in 1:nrow(smpl_treated)) {
x = smpl_treated[i]$score
setkey(smpl_tmp, score)
tmp = smpl_tmp[J(x), roll = "nearest"]
matched_id[i] = tmp[[1]]
smpl_tmp = smpl_tmp[id != tmp[[1]]]
}
matched_smpl = smpl_untreated[id %in% matched_id]
> matched_smpl
id treatment score
1: 87 0 0.06852409
2: 94 0 0.07160314
3: 88 0 0.07473471
कोई सुझाव यह एक data.table के भीतर हो या तेज पाश बनाने बनाने के लिए: वर्तमान में मैं floowing पाश चल रहा हूँ? मूल 1.2 एम obs के साथ लूप 2 घंटे से अधिक लेता है। आपकी सहायता के लिए अग्रिम धन्यवाद!
मान लीजिए आप निम्नलिखित 5 नमूने होगा: {(आईडी = 1, उपचार = 0, स्कोर = 0), (आईडी = 2 , उपचार = 1, स्कोर = 0.1), (आईडी = 3, उपचार = 1, स्कोर = 0.2), (आईडी = 4, उपचार = 1, स्कोर = 0.3), (आईडी = 5, उपचार = 0, स्कोर = 0.4)}। दूसरे शब्दों में, आपके पास दो इलाज न किए गए अवलोकनों के बीच 3 व्यवहार किए गए अवलोकन हैं। इस मामले में, क्या नक्शे क्या है? – Ben
मेरे संदर्भ में, ऐसा नहीं होगा। यदि ऐसा होता है, हालांकि, शायद मुझे विपरीत करना चाहिए - इसका मुख्य उद्देश्य इलाज और इलाज न किए गए अवलोकनों का संतुलित नमूना प्राप्त कर रहा है। – jayc