Удалить строки с дублированными идентификаторами
Я хочу удалить строки с дублированными идентификаторами
данные
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
по имени вашего фрейма данных.