找到用户输入值更大的向量的最小索引

时间:2016-05-16 15:53:03

标签: r vector dataframe

Data:-

static_vector <- c(10,50,100,200,500,1000)
df <- data.frame(Id=c("A1","B1"),Value=c(5,200))

  Id Value
1 A1     5
2 B1   200

df$Position <-static_vector[which(df$Value<=static_vector)]

Error:-
replacement has 4 rows, data has 2

Expected Output:-

  Id Value Position
1 A1     5  1
2 B1   200  4

正如您所看到的,A1(5)的值小于或等于静态向量中的第一个元素,因此我需要将Position值设置为1.我尝试使用上面的哪个语句但是,它给我一个错误。

2 个答案:

答案 0 :(得分:2)

您可以使用cut功能:

df$Position <- as.integer(cut(df$Value, breaks = c(0, static_vector)))
df
  Id Value Position
1 A1     5        1
2 B1   200        4

答案 1 :(得分:2)

如果您想使用which

df$Position <- sapply(df$Value, function(i) min(which(i <= static_vector)))
df
#  Id Value Position
#1 A1     5        1
#2 B1   200        4