我有一个很大的数值向量-如何有效地从中移除唯一值?
举一个简化的例子,我如何从矢量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/