返回一个无重复的向量[不使用unique()或重复()]

时间:2018-09-26 11:51:34

标签: r loops vector

我试图在不使用唯一函数的情况下摆脱向量中的重复项(因为该函数在那种情况下不起作用)。 我的循环如下:

#finding and deleting duplicates
dupes <- function(x) {
    for (i in 1:(length(x))){
        while (is_true(all.equal(x[i],x[i+1]))){
            x=x[-i]
        }    
            }
    print(x)
}

我想通过该函数运行一个向量,并返回一个向量(没有重复)。

3 个答案:

答案 0 :(得分:2)

这是一种简单的方法-

# for numeric vector
x <- c(1:8, 4:10)
# [1]  1  2  3  4  5  6  7  8  4  5  6  7  8  9 10
x[ave(x, x, FUN = seq_along) == 1]
# [1]  1  2  3  4  5  6  7  8  9 10

# for character vector
x <- as.character(iris$Species)
x[ave(x, x, FUN = seq_along) == 1]
# [1] "setosa"     "versicolor" "virginica"

答案 1 :(得分:1)

这里有两种方法,假设您的向量不是数字(即它是整数或字符),

set.seed(666)
v1 <- sample(15:20, 10, replace = TRUE)

as.integer(names(table(v1)))
#[1] 15 16 17 19 20
rle(sort(v1))$values
#[1] 15 16 17 19 20

答案 2 :(得分:0)

dplyr的distinct()函数将为您服务。

 library(dplyr)  
 df_new <- distinct(your_vector)