Mock$num girdilerinin aralık veri çerçevesi tarafından belirtilen xy aralığına kaç kez girdiğini bulmam gereken 2 veri çerçevem var.
id <- c(1:9)
num <- c(99,101,199,250,999,1500,3000,4000,5000)
mock <- data.frame(id, num)
x <- c(100,100,200,1000,4000,4000)
y <- c(198,200,300,2000,5000,5000)
range <- data.frame(x,y)
İstenen çıktı aşağıda gösterilmiştir
id num check
1 99 0
2 101 2
3 199 1
4 250 1
5 999 0
6 1500 1
7 3000 0
8 4000 2
9 5000 2
aşağıdaki kodla elde edilebilir
mock$check <- mapply(
function(x){
count = 0
for (i in 1:nrow(range)){
if (x >= range$x[i] & x <= range$y[i]){
count = count + 1
}
}
paste0(count)
},
mock$num
)
Yukarıdaki yaklaşım, for döngüsü nedeniyle büyük veri kümeleri için uygun değildir ve eşit olmayan bir birleştirme yöntemi kullanmaya çalışıyordum (via data.table
). Ancak, iki tablo arasında eşit olmayan bir birleşimin nasıl yapılacağı konusunda sıkışıp kaldım (nasıl devam edeceğimden emin değilim...)
nonequi <- mock[range, on =.(num >= x, num <=y),]
Bu soruna biraz rehberlik etmek istiyorum. Yardımlarınız için teşekkürler.