从R中的两个向量中,找到第二个向量中的min大于第一个中的每个值

时间:2016-10-28 20:11:28

标签: r

我在R中有两个向量:

> x <- c(323, 344, 383, 404, 428, 444, 1447, 1466, 1492, 1512)
> y <- c(329, 389, 1453, 1465, 1498, 1511)

我需要一个带x的数据框和y大于x的最小值,所以这是我正在寻找的结果集:

> data.frame(
      x = c(323, 344, 383, 404, 428, 444, 1447, 1466, 1492, 1512), 
      y = c(329, 389, 389, 1453, 1453, 1453, 1453, 1498, 1498, NA)
      )

我尝试过子集,例如:

> x_data_frame <- data.frame(a = x) #create the frame
> x_data_frame$b <- min(y[y > x]) #calculation

但当然,这不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以遍历x并根据您的条件构建一个向量:

data.frame(x, y = sapply(x, function(i) dplyr::na_if(min(y[y>i]), Inf)))

#      x    y
#1   323  329
#2   344  389
#3   383  389
#4   404 1453
#5   428 1453
#6   444 1453
#7  1447 1453
#8  1466 1498
#9  1492 1498
#10 1512   NA

使用na_if()中的dplyr函数将Inf值替换为NA,如果Inf值适合您的分析,则可以忽略它。< / p>