2016-05-16 47 views
0
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)的值小于或等于静态向量中的第一个元素,所以我需要位置值作为1.我尝试使用其中上面的声明,但它,它会引发一个错误。找到用户输入值较大的向量的最小索引

回答

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 
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 
相关问题