Her tedavi edilen gözlem için en yakın değeri bulmaya çalışıyorum. (1.2 M atıl bir kısmi veriler) verileri aşağıdaki gibidir bak: muamele edilen her bir gözlem içinBir data.table içinde en yakın değeri bulma
> 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
(yani, tedavi = 1), bir muamele edilmemiş bir gözlem almak istiyorum (yani, tedavi = 0) ile En yakın skoru seçin ve seçilen gözlemi eşleştirilecek diğer tedavi edilen gözlemler için uygun olmayan şekilde işaretleyin. Örneğin, ilk tedavi edilen gözlem (sıra 10), id = 88 (satır 16), satır 12 ila satır 17, vb. Ile eşleşecektir.
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
herhangi bir öneriniz bu data.table içinde gerçekleşmesi veya daha hızlı döngü yapmak yapmak: Şu anda floowing döngü koşuyorum? Orijinal 1.2M obs ile, döngü 2 saatten fazla sürüyor. Yardımınız için şimdiden teşekkür ederiz!
aşağıdaki 5 örnekleri olduğunu varsayalım: {(id = 1, tedavi = 0, skor = 0), (id = 2 , tedavi = 1, skor = 0.1), (id = 3, tedavi = 1, skor = 0.2), (id = 4, tedavi = 1, skor = 0.3), (id = 5, tedavi = 0, skor = 0.4))}. Başka bir deyişle, iki muamele görmemiş gözlem arasında sıkışmış 3 tedavi gözleminiz var. Bu durumda ne için haritalar? – Ben
Bağlamda, bu olmayacak. Öyle olsa, muhtemelen, tam tersini yapmalıyım - bunun temel amacı, tedavi edilmiş ve tedavi edilmemiş gözlemlerin dengeli bir örneğini almaktır. – jayc