Как разделить данные, а затем удалить группы, если есть дубликаты? - PullRequest
0 голосов
/ 12 апреля 2019

В настоящее время у меня есть кадр данных, который выглядит примерно так:

   ID val
1   1   a
2   1   b
3   2   a
4   2   b
5   2   b
6   3   c
7   3   a
8   4   a
9   5   a
10  5   b

Я хочу удалить целую группу идентификаторов, если есть повторяющиеся значения. Итак, вывод, который я хочу, это:

  ID val
1  1   a
2  1   b
3  3   c
4  3   a
5  4   a
6  5   a
7  5   b

Я сталкивался с решениями по удалению отдельных строк, но не фрагментов данных. Буду ли я использовать цикл для этого?

Ответы [ 3 ]

0 голосов
/ 12 апреля 2019

В базе R,

df[!df$ID %in% unique(df$ID[duplicated(df)]),]

#   ID val
#1   1   a
#2   1   b
#6   3   c
#7   3   a
#8   4   a
#9   5   a
#10  5   b
0 голосов
/ 12 апреля 2019

Вот еще один base R метод, который использует table с rowSums для определения идентификаторов для сохранения

df[df$ID %in% names(which(!rowSums(table(df) > 1))),]
#    ID val
#1   1   a
#2   1   b
#6   3   c
#7   3   a
#8   4   a
#9   5   a
#10  5   b
0 голосов
/ 12 апреля 2019

С помощью dplyr мы можем group_by ID и выбирать группы, если в группе нет дубликатов.

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(!any(duplicated(val)))

#     ID val  
#  <int> <fct>
#1     1 a    
#2     1 b    
#3     3 c    
#4     3 a    
#5     4 a    
#6     5 a    
#7     5 b    

или с использованием базы R ave

df[!with(df, as.logical(ave(val, ID, FUN = function(x) any(duplicated(x))))), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...