Вернуть вектор, свободный от дубликатов [без использования unique () или duplicate ()] - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь избавиться от дубликатов в векторе без использования уникальной функции (так как эта не работает в этом случае).Мой цикл выглядит следующим образом:

#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 голосов
/ 26 сентября 2018

Вот один простой способ сделать это -

# 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"
0 голосов
/ 26 сентября 2018

Вот несколько способов сделать это, предполагая, что ваш вектор НЕ является числовым (т.е. это целое число или символ),

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
0 голосов
/ 26 сентября 2018

dplyr distinct() функция будет работать для вас.

 library(dplyr)  
 df_new <- distinct(your_vector)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...