查找值不为零的最小和最大索引

时间:2014-04-21 19:09:08

标签: r

我有一个名为test的向量,包含8个元素。

我想返回一个名为points的向量,其中包含测试向量的MAX和MIN,其中test不能为零。即我不希望0为最小值或最大值

这是我的代码

test<- c(1,8,2,3,4,5,0,7)
test

points <- c((1:length(test))[  (test ==  min(test, na.rm = TRUE) | test == max(test,     na.rm = TRUE)  ) && test != 0    ])
points

现在点返回

integer(0)

我希望积分返回

1 2

因为1是最小值的索引,2是最大值的索引

谢谢!

3 个答案:

答案 0 :(得分:4)

使用rangematch,它比自定义函数更快:

vals = range(test[test != 0])
match(vals, test)

答案 1 :(得分:2)

这个功能可能会做你想要的......

minmax <- function(v){
  v.na <- v
  v.na[v==0] <- NA
  return(c( which.min(v.na), which.max(v.na) ))
}
minmax(test)

一切顺利

答案 2 :(得分:0)

删除零值后,您可以使用match函数:

test<- c(1,8,2,3,4,5,0,7)
test2 <- test[test!=0]
match(c(min(test2 ),max(test2)),test)