如何从R中的列表中找到最接近的匹配项

时间:2018-06-14 21:47:48

标签: r

我有一个数字列表,并希望找到与data.frame中的每个数字相比最低的数字。我有:

list <- c(3,6,9,12)
X <- c(1:10)
df <- data.frame(X)

我想将df中的变量添加为list中的下一个最高数字。即:

X   Y
1   3
2   3
3   3
4   6
5   6
6   6
7   9
8   9
9   9
10  12

我试过了:

df$Y <- which.min(abs(list-df$X))

但是这会给出错误消息,并且只会从列表中获取最接近的值,而不是上面的下一个值。

2 个答案:

答案 0 :(得分:2)

另一种方法是使用findInterval

df$Y <- list[findInterval(X, list, left.open=TRUE) + 1]

> df
    X  Y
1   1  3
2   2  3
3   3  3
4   4  6
5   5  6
6   6  6
7   7  9
8   8  9
9   9  9
10 10 12

答案 1 :(得分:1)

你可以这样做......

df$Y <- sapply(df$X, function(x) min(list[list>=x]))

df
    X  Y
1   1  3
2   2  3
3   3  3
4   4  6
5   5  6
6   6  6
7   7  9
8   8  9
9   9  9
10 10 12