비 동등에 가입하는 두 개의 테이블

0

질문

저는 2dataframes 는 곳에 나를 찾을 필요가 어떻게 여러 번 항목에서 모$num 가을의 범위 내에서는 x-y 에 의해 지정된 범위 데이터 프레임.

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
)

위의 방법은 적합하지 않는 large dataset 상해에 대한 루프를 사용 하려고 했던 비 equi 드(via data.table). 그러나 내가 붙어있으로 어떻게 비 동등을 사용하여 두 개의 테이블(하는 방법을 확실하지 않을 진행...)

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

고 싶을 추구하는 몇 가지 지침이 이 문제를 해결합니다. 당신의 도움을 주셔서 감사합니다.

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

먼저 아닌 동등에 가입한 다음 각 요약 id 얼마나 많은 시간이 나타납 및 가입하세로 돌아 mock 를 찾 id 었습니다. 사람들을 위해 id 카운트 설정을니다.

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

지에 대해 실행 속도로 대량 데이터 배열

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ý
..................................................................................................................