我有两个数据框(A和B),每个数据框都有x和y坐标列。对于A中的给定行,我想知道B中是否有一行(或多行)anywhere的B(X)和B(Y)值分别在+ /范围内-A(X)和A(Y)中的值的0.2。我还需要知道该行在B中的位置。
示例数据:
AX<-c(1:5)
AY<-c(1.2,2.2,3.5,4.3,5.5)
A<-data.frame(AX, AY)
BX<- c(0.8,0.9,3.8,6,2.1)
BY<- c(1.1,1.4,4,7,2.4)
B<-data.frame(BX,BY)
解决方案是这样的:
对于A的第1行-B的第1行和第2行在范围内
对于A的第2行-B的第5行在范围内
对于A的第3行-B的任何行都不在范围内,
依此类推。
本质上,我试图在B中找到与A中的xy点接近的xy点。
这是使用基数R的一种方法:
lapply(asplit(A, 1), function(x) which(rowSums(abs(sweep(B, 2, x)) <= 0.2) == 2))
#[[1]]
#[1] 1 2
#[[2]]
#[1] 5
#[[3]]
#integer(0)
#[[4]]
#integer(0)
#[[5]]
#integer(0)