首页 > 解决方案 > R - 基于下一个最大值的左连接

问题描述

我希望根据它落在哪两个值之间将一个表加入我的数据集。它最好在 dplyr 管道中工作。数据集如下所示:

data <- data.frame(ID = c(01,02,03,04,05,06), result = c(0.33,0,-2.11,3.33,4.44,-7.1))
key <- data.frame(upper_value = c(-4,-1,1,4,10), points = c(0,1,2,3,4))

结果的最小值可以是 10,但是当我正在搜索下一个最大(或相等)值时,关键数据集中没有提到它。

请注意,结果不必是整数。

预期结果如下所示:

expected <- data.frame(ID = c(01,02,03,04,05,06), result = c(0.3333,0,-2.11,3.3333,4.44,-7.1), c(2,2,1,3,4,0))

标签: rjoin

解决方案


我们可以用findInterval

data$new <- findInterval(data$result, key$upper_value)

-输出

data
#  ID result new
#1  1   0.33   2
#2  2   0.00   2
#3  3  -2.11   1
#4  4   3.33   3
#5  5   4.44   4
#6  6  -7.10   0

在此示例中,“点”与索引相同。万一不一样

data$new <- key$points[findInterval(data$result, key$upper_value) + 1]

推荐阅读