r - 通过使用 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 向量只给我一行,我想将我的最小向量作为结果向量
解决方案
这是你想要的:
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
推荐阅读
- php - 学说查询生成器 SELECT DISTINCT 抛出错误
- android - 如何检测WiFi接入点是否刚刚在Android中失去了互联网连接
- c# - 从 DataGridView 复制到 Excel 工作表并保持工作表格式
- node.js - Electron JS/Node JS 桌面应用程序作为本地网络网络服务器
- devops - SaltStack:没有找到顶级文件或master_tops数据匹配项
- ruby-on-rails - 解析json时如何保存树形结构?
- ios - UIStackView 隐藏动画无法正常工作
- c# - 如果单击行并将其列从 true 更改为 false,我如何在 DataGrid 中检测到,反之亦然?
- javascript - 如何在 javascript 中使用另一个数组中的属性过滤一个数组中的对象?
- angular - 角度条件