我有一个数字列表,并希望找到与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))
但是这会给出错误消息,并且只会从列表中获取最接近的值,而不是上面的下一个值。
答案 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