ไม่ equi ร่วมกับสองตารางข้อมูลเรียบร้อยแล้ว

0

คำถาม

ฉันมี 2 dataframes ที่ฉันต้องการจะเจอกี่ครั้งแล้วที่อยู่ในรายการล้อเลียน$num ถอยภายในระยะของ x-y ที่ระบุโดยผู้ช่วง dataframe.

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)

ที่ต้องการแสดงผลส่งออกด้านล่างนี้

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

ซึ่งสามารถเป็นได้รับโดยคอยตามรหัส

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
)

ที่อยู่เหนือเข้าใกล้คือ unsuitable สำหรับขนาดใหญ่ datasets เนื่องจากสำหรับวงและฉันกำลังพยายามจะใช้งานไม่ equi ร่วมกับวิธีการ(ผ่านทาง data.table). อย่างไรก็ตามฉันติดแหงกอยู่ที่ยังทำไม่ equi ร่วมระหว่างสองคนตารางข้อมูลเรียบร้อยแล้ว(ยังไม่แน่ใจนักว่ายังไงต้องดำเนินการที่จะ...)

nonequi <- mock[range, on =.(num >= x, num <=y),]

อยากจะมองหาบางคำแนะนำที่จะปัญหานี้ ขอชื่นชมที่ช่วยเหลือนะคะ

non-equi-join r
2021-11-24 06:40:20
2
2

คนแรกทำไม่ equi เข้าร่วมแล้ว summarise สำหรับแต่ละ id กี่ครั้งแล้วที่มันดูเหมือนกับกลับไป mock เพื่อค้นหาออกไปซึ่งนั่นก็น่าจะเป็นบัตรประจำตัถูกทิ้งให้ออกมา สำหรับพวกนั้นก็น่าจะเป็นบัตรประจำตัตั้งค่าจำนวนให้เหลือศูนย์ได้

res <- setDT(mock)[setDT(range), .(id), on = .(num >= x, num <= y)][, .N, by = id][mock, on = .(id)][is.na(N), N := 0][]
2021-11-24 07:12:05
2

ไม่ค่อยแน่ใจเกี่ยวกับเรื่องที่การประมวลผลความเร็วใหญ่สำหรับข้อมูล arrays

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)

mock$check <- sapply(mock$num, function(z) sum(z >= RANGE$x & z <= RANGE$y))

mock
#>   id  num check
#> 1  1   99     0
#> 2  2  101     2
#> 3  3  199     1
#> 4  4  250     1
#> 5  5  999     0
#> 6  6 1500     1
#> 7  7 3000     0
#> 8  8 4000     2
#> 9  9 5000     2

ถูกสร้างบน 2021-11-24 โดย reprex ห่อของ (v2.0.1)

2021-11-24 07:20:12

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่