我有两个向量g
和h
。我想比较这两个向量中的数字,并找出它们之间是否有任何共同的元素。但是,共同元素不必完全相同,并且可以在(-0.5, +0.5)
的范围内。因此,g±0.5
与h±0.5
进行了比较。
g <- c(0.5, 5956.3, 38, 22.666, 590.3, 21.992, 9.3)
h <- c(0.7, 99.2, 39, 30, 21.68, 9.4, 22.333, 0.001, 0.000222, 9.999)
例如,在上面的两个向量中,来自0.5
的{{1}}和来自g
的{{1}}匹配,因为它们位于0.7
附近彼此。 h
和±0.5
也匹配。此外,9.4
和9.3
也匹配,因为它们的差异也在22.666
范围内。
请务必注意22.333
的每个元素应与(-0.5, +0.5)
的每个元素进行比较。
是否有在g
中执行此操作的功能?
h
函数仅将来自一个向量的每个元素与来自另一个向量的具有相同索引的元素进行比较,因此期望来自向量的长度相等。我想要做的是,我想将向量R
的每个元素与向量all.equal
的每个元素进行比较。
答案 0 :(得分:4)
您可以使用outer
全部减去并将这些差异(它们的绝对值)调整为小于或等于0.5,即
m1 <- which(abs(outer(g, h, `-`)) <= 0.5, arr.ind = TRUE)
给出,
row col #where row = g and col = h [1,] 1 1 [2,] 6 5 [3,] 7 6 [4,] 4 7 [5,] 6 7 [6,] 1 8 [7,] 1 9
您可以玩游戏以获得所需的输出(您未指定所需的输出)。这是一种方式,
cbind(g = g[m1[,1]], h = h[m1[,2]])
# g h
# [1,] 0.500 0.700000
# [2,] 21.992 21.680000
# [3,] 9.300 9.400000
# [4,] 22.666 22.333000
# [5,] 21.992 22.333000
# [6,] 0.500 0.001000
# [7,] 0.500 0.000222
答案 1 :(得分:1)
lapply(g, function(x) abs(x - h) < 1.0)
这会返回一个向量列表,根据g
的容差,将h
的每个元素与1.0
的每个元素进行比较。
答案 2 :(得分:0)
试试这段代码:
comb<-expand.grid(g, h)
colnames(comb)<-c("g","h")
comb[abs(comb[,1]-comb[,2])<1,]
g h
1 0.500 0.700000
32 22.666 21.680000
34 21.992 21.680000
42 9.300 9.400000
46 22.666 22.333000
48 21.992 22.333000
50 0.500 0.001000
57 0.500 0.000222
70 9.300 9.999000