Удалить строки с дублированными идентификаторами

Я хочу удалить строки с дублированными идентификаторами

данные

id    V1    V2   
1     a      1
1     b      2
2     a      2
2     c      3
3     a      4

Проблема в том, что некоторые люди проходили тест несколько раз, который генерирует несколько баллов на V2, я хочу удалить дублированный идентификатор и сохранить один из баллов в V2 случайным образом.

выход

id    V1    V2   
1     a      1
2     a      2
3     a      4

Я попробовал это:

neu <- unique(neu$userid)

но это не сработало

2 ответа

Решение

С помощью dplyr:

library(dplyr)
set.seed(1)
df %>% sample_frac(., 1) %>% arrange(id) %>% distinct(id) 

Выход:

  id V1 V2
1  1  b  2
2  2  c  3
3  3  a  4

Данные:

df <- structure(list(id = c(1L, 1L, 2L, 2L, 3L), V1 = structure(c(1L, 
2L, 1L, 3L, 1L), .Label = c("a", "b", "c"), class = "factor"), 
    V2 = c(1L, 2L, 2L, 3L, 4L)), .Names = c("id", "V1", "V2"), class = "data.frame", row.names = c(NA, 
-5L))

Создание фрейма данных на основе вашего примера:

df <- read.table(text = 
"id    V1    V2   
1     a      1
1     b      2
2     a      2
2     c      3
3     a      4", h = T)

Так как вы хотите удалить строки случайным образом, сначала отсортируйте строки вашего фрейма данных случайным образом:

df <- df[sample(nrow(df)),]

Затем удалите дубликаты в порядке появления:

df <- df[!duplicated(df$id),]

Теперь отсортируйте ваш фрейм данных обратно:

df <- df[with(df, order(id)),]

Не забудьте изменить df по имени вашего фрейма данных.

Другие вопросы по тегам