首页 > 解决方案 > 通过使用 for 循环的容差来比较向量

问题描述

我有两个向量作为输出,它们有不同的长度。现在,我想将一个向量的每个元素与另一个向量的每个元素进行比较。

假设这些是我的两个向量:

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
[1]  2 15
 r1
[1]  1.5  3.5  4.5  5.5  8.5 11.5 12.5 17.5

从@shirin 运行代码后,我将其作为结果向量:

    V1   V2
1    2   1.5

使用此错误消息

rbind(res, cbind(min[i], hc[abs(hc - min[i]) <= 0.5])) 中的错误:
矩阵的列数必须匹配(参见参数 2)

现在,如果我的 res 向量只给我一行,我想将我的最小向量作为结果向量

标签: rfor-loopif-statement

解决方案


这是你想要的:

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

推荐阅读