我有一个名为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是最大值的索引
谢谢!
答案 0 :(得分:4)
使用range
和match
,它比自定义函数更快:
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)