更快的解码我的编码,用...替换循环?

时间:2016-11-10 21:18:19

标签: r

我有两个数据列表,我希望将一个变量与另一个变量匹配,并在一个区间内匹配一个变量。我是通过循环完成的,但需要很长时间。我正在努力学习R并熟悉lapply家庭,并想知道我是否可以在这里使用它?或者,如果有任何其他解决方案。

我的解决方案:

x <- data.frame( A = c(1,2,3,4,5,6,2,3,4,5,5), B =     c(67,49,49,59,68,91,67,48,49,67,91))
y <- data.frame( A = c(2,6,3,4,5,6,2,5,4,7,5), B =    c(67,50,49,59,50,91,67,50,49,68,91))

ko <- data.frame(c())

for(i in 1:11){
  wi <- which(y[,1] == x[i,1] & y[,2] <= (x[i,2] +10) & y[,2] >=     (x[i,2] - 10))
  t <- y[wi,]
  ko <- rbind(ko, t)
}

ko中返回所需的结果。

1 个答案:

答案 0 :(得分:1)

我们可以合并然后在结果上使用过滤器:

# merge
res <- merge(x, y, by = "A")
# then filter on interval
res <- res[ res$B.y <= res$B.x + 10 &
              res$B.y >= res$B.x - 10, c("A", "B.y")]
colnames(res)[2] <- "B"

# compare to ko result, sort then check
ko <- ko[ order(ko$A, ko$B), ]
res <- res[ order(res$A, res$B), ]
all(ko == res)
# [1] TRUE