Сравните векторы, используя допуск с циклом for - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть два вектора на выходе, и они имеют разную длину.Теперь я хочу сравнить каждый элемент одного вектора с каждым элементом другого вектора.

Предположим, это два моих вектора:

r1 <- c(1.5,3.5,4.5,5.5,8.5,11.5,12.5,17.5)
min <- c(3,6,11)

И моя команда сравнения выглядит следующим образом:

m1 <- which(abs(outer(min, r1, `-`)) <= 0.5, arr.ind = TRUE)
cbind.data.frame(min = min[m1[,1]], r1 = r1[m1[,2]])

Это работает и дает мне такой вывод:

  min   r1
1   3  3.5
2   6  5.5
3  11 11.5

Сейчас я спрашиваю, как сделать то же самое, просто используя цикл for (возможно, с помощью оператора if else)?Я уже придумал это решение, но я не знаю, как интегрировать допуск (+/- 0,5) ...

z<-rep(0,length(r1))
for(i in 1:length(r1))
{
  for(j in 1:length(min))
  {
    if(x[j]>y[i])
      z[i]=z[i]+1
  }
}

Есть идеи?

РЕДАКТИРОВАТЬ:

Как получить вектор min в качестве результирующего вектора, если у меня есть, например, эти векторы:

 min
[1]  2 15
 r1
[1]  1.5  3.5  4.5  5.5  8.5 11.5 12.5 17.5

После запуска кода из @shirin я получаю это как результатvector:

    V1   V2
1    2   1.5

С этим сообщением об ошибке :

Ошибка в rbind (res, cbind (min [i], hc [abs (hc - -min [i]) <= 0.5])): <br>число столбцов матриц должно совпадать (см. аргумент 2)

Теперь я хочу, чтобы мой min вектор получался в результатевектор, если мой вектор res дает мне только одну строку

1 Ответ

0 голосов
/ 19 сентября 2018

Вот что вы хотите:

res<-NULL
for (i in 1:length(min)){
   res<-rbind(res,cbind(min[i],r1[abs(r1-min[i])<=0.5]))
}
res
#      [,1] [,2]
#[1,]    3  3.5
#[2,]    6  5.5
#[3,]   11 11.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...