删除R中向量的最大值

时间:2013-07-30 03:51:39

标签: r

我有一个向量v,我想从v中删除向量v的最大值。我可以找到每个值重复多少次,但如何从R中的v中删除v的最大值?

v = c(0.25, 0.25, 0.3, 0.3, 0.3, 5, 6, 6.5, 8, 8, 8)
max(v)
[1] 8
j = as.numeric(unname(table(v)))
j
[1] 2 3 1 1 1 3

另外,如果我有另一个载体a

a = rep(1, length(v))

v的长度相同,我想删除最后3个,我该怎么办?

3 个答案:

答案 0 :(得分:14)

替代

v[v < max(v)]
[1] 0.25 0.25 0.30 0.30 0.30 5.00 6.00 6.50

答案 1 :(得分:8)

可能逻辑索引在这里更快:

v[v != max(v)]

## > v[v != max(v)]
## [1] 0.25 0.25 0.30 0.30 0.30 5.00 6.00 6.50

编辑想要添加替补标记:

v <- rep(c(0.25, 0.25, 0.3, 0.3, 0.3, 5, 6, 6.5, 8, 8, 8), 10000) #repeat 10,000 x

a <-function() v[v != max(v)]
b <-function() v[-which(v == max(v))]
d <- function() v[!v== max(v)]
e <- function() v[v < max(v)]
f <- function() v[which(v != max(v))]
g <- function() v[which(v < max(v))]

使用microbenchmark软件包进行100次重复(win 7 machine):

## Unit: milliseconds
##  expr      min       lq   median       uq       max neval
##   a() 2.854048 2.990731 3.200889 4.734276 54.814676   100
##   b() 3.268299 3.487321 3.642666 5.241360  6.254832   100
##   d() 3.016389 3.265034 3.454200 5.027703 54.879986   100
##   e() 2.748151 2.892300 3.095694 4.475367  5.394139   100
##   f() 2.047936 2.208645 2.423001 3.967349 54.291730   100
##   g() 1.948105 2.208178 2.352093 3.860988  4.995748   100

编辑(arun)

就我所见,逻辑索引向量比使用“which”和直接索引元素要慢。这才是最重要的。我还创建了一个帖子here以了解原因,如果有人有一个答案,我想要一个答案...... :)

答案 2 :(得分:2)

v[-which(v == max(v))]
# [1] 0.25 0.25 0.30 0.30 0.30 5.00 6.00 6.50

which(v == max(v))返回v的等于最大值的位置:

which(v == max(v))
[1]  9 10 11

所以我们只是说删除这些位置的值。