我希望有一个逻辑向量,用于标识仅在数据帧的列中出现一次的元素的位置。
据我所知unique()
和duplicated()
基本R函数无法提供帮助,因为它们显示重复删除的值列表或重复位置。
使用table()
函数可以识别出现一次但不是用于进一步数据操作的位置的值。有什么建议?非常感谢
答案 0 :(得分:3)
让x
成为你的向量,例如:
set.seed(1)
x <- sample(1:10, 10 ,replace = T)
您可以分两步完成:
var.names <- names(table(x))[table(x) == 1]
match(var.names, x)
要获得var.names
,您也可以这样做:
names(which(table(x) == 1))
答案 1 :(得分:0)
这里有很多答案。我以为我会比较他们的计算时间
x <- rbinom(500, 1000, 0.5)
microbenchmark::microbenchmark(
x[which(!(duplicated(x)|duplicated(x, fromLast=TRUE)))],
x[ave(x, x, FUN = length) == 1],
setdiff(unique(x),x[duplicated(x)]),
names(which(table(x) == 1))
)
输出为
Unit: microseconds
expr min lq mean median
x[which(!(duplicated(x) | duplicated(x, fromLast = TRUE)))] 22.517 26.2880 28.75954 29.460
x[ave(x, x, FUN = length) == 1] 247.923 256.4725 265.80232 262.290
setdiff(unique(x), x[duplicated(x)]) 38.706 41.1915 45.58309 46.278
names(which(table(x) == 1)) 194.656 204.4935 213.87719 213.388
uq max neval cld
31.036 41.033 100 a
266.321 461.379 100 d
48.546 71.819 100 b
219.536 290.785 100 c
所以胜利者是x[which(!(duplicated(x)|duplicated(x, fromLast=TRUE)))]