Р: Предположимподсчета R значения вектора в диапазоне заданной двумя другими векторами
length(v)=n length(a)=m=length(b),
n and m are large;
v, a, b may contain NA or NaN's;
a not necessarily smaller than b.
Как найти количество таких пар индексов Ij, что
a[j] < v[i] < b[j]
Как найти номер такой (I, J), что либо
a[j] < v[i] < b[j] or a[j] > v[i] > b[j]
Это кажется слишком медленным:
sumrange <- function(v,ma)
{
s <- 0
for(i in 1:length(v))
{
s <- s + sum(v[i] > ma[,1] & ma[,2] > v[i], na.rm = TRUE)
}
s
}
result <- sumrange(v, cbind(a, b))
РЕДАКТИРОВАТЬ: @DatamineR
a<-c(1,6,4,2,NA)
b<-c(5,4,0,7,0)
v<-c(3,5)
возможных пар в вопросе 1:
1<3<5 (1,1)
2<3<7 (1,4)
2<5<7 (2,4)
результат = 3
возможных пар в вопросе 2: все выше и
6> 5> 4 (2,2)
результат = 3 + 1 = 4
EDIT: На самом деле он работает лучше один первый капель НС-х
vc<-na.omit(v)
ma<-na.omit(cbind(a,b))
result<-sumrange(vc,ma)
Если вы предоставили простой пример и набор данных, было бы гораздо проще, чтобы помочь вам – DatamineR
также , ожидаемый результат помог бы, так как это помогло бы убедиться, что цикл, который у вас есть, - это то, что вы намеревались. В цикле у вас есть, вы сравниваете 1 элемент 'v' с одним целым столбцом' m', это то, что вы намеревались сделать? – steveb