我有一个很大的数值向量-如何有效地从中移除唯一值?

举一个简化的例子,我如何从矢量a转换为矢量b

> a = c(1, 2, 3, 3, 2, 4) # 1 and 4 are the unique values
> b = c(2, 3, 3, 2)

最佳答案

要添加到已经可用的选项:

a[duplicated(a) | duplicated(a, fromLast=TRUE)]
# [1] 2 3 3 2

更新:更多基准!

将Prasanna的答案与我的答案进行比较,并将其与asieira的功能进行比较,我们得到以下信息:
fun1 <- function(x) x[x %in% x[duplicated(x)]]
fun2 <- function(x) x[duplicated(x) | duplicated(x, fromLast=TRUE)]

set.seed(1)
a <- ceiling(runif(1000000, min=0, max=100))

library(microbenchmark)
microbenchmark(remove.uniques1(a), remove.uniques2(a),
               fun1(a), fun2(a), times = 20)
# Unit: milliseconds
#                expr       min        lq    median        uq       max neval
#  remove.uniques1(a) 1957.9565 1971.3125 2002.7045 2057.0911 2151.1178    20
#  remove.uniques2(a) 2049.9714 2065.6566 2095.4877 2146.3000 2210.6742    20
#             fun1(a)  213.6129  216.6337  219.2829  297.3085  303.9394    20
#             fun2(a)  154.0829  155.5459  155.9748  158.9121  246.2436    20

我怀疑唯一值的数量也会影响这些方法的效率。

关于r - 如何从向量中删除唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21494535/

10-12 17:07