Фильтрация дубликатов по группам (R) - PullRequest
0 голосов
/ 12 декабря 2018

Пример данных приведен ниже,

1) Мне нужно удалить людей (ID s), у которых более одного GroupID записано в Month 0.Так, например, FGH не следует включать в мой анализ.

2) Я хочу рассчитать процент людей (уникальных ID с), которые имеют одинаковые GroupID от 0 до 4 месяца подряд (1, 2 и 3 и 4 месяца).(пример ID ABC соответствует этому критерию, несмотря на то, что у них есть два идентификатора группы, записанные в месяце 1).

(ID на самом деле 9 цифр).Некоторые идентификаторы имеют несколько идентификаторов группы каждый месяц (например, YUI).

ID   Month   GroupID
ABC   0      390988
ABC   1      390988
ABC   1      934667
ABC   2      390988
ABC   3      390988
ABC   4      390988
FGH   0      678743
FGH   0      789555
FGH   1      678666
FGH   2      678666
FGH   2      982342
YUI   0      989000
YUI   1      567099
YUI   2      873467
YUI   3      567099
YUI   3      348938
YUI   4      567099

Я немного новичок в R, и я ищу dplyr / tidyverse решение этой, казалось бы, легкой манипуляции.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 12 декабря 2018

Вот решение dplyr.В два шага, сначала проблема 1, а затем проблема с входными данными на выходе 1.

library(dplyr)

df2 <- df1 %>%
  group_by(ID) %>%
  mutate(zeros = sum(Month == 0)) %>%
  filter(zeros < 2) %>%
  select(-zeros)

df2
## A tibble: 5 x 3
## Groups:   ID [2]
#  ID    Month GroupID
#  <fct> <int>   <int>
#1 ABC       0     390
#2 ABC       1     390
#3 ABC       2     390
#4 YUI       0     989
#5 YUI       1     567

Теперь используйте этот вывод в качестве входа следующей трубы.

df3 <- df2 %>%
  group_by(ID) %>%
  mutate(M = c(TRUE, diff(Month) == 1),
         G = GroupID[M],
         G = length(unique(G))) %>%
  filter(M & G == 1) %>%
  select(-M, -G)

df3
## A tibble: 3 x 3
## Groups:   ID [1]
#  ID    Month GroupID
#  <fct> <int>   <int>
#1 ABC       0     390
#2 ABC       1     390
#3 ABC       2     390

Данные.

df1 <- read.table(text = "
ID   Month   GroupID
ABC   0      390
ABC   1      390
ABC   2      390 
FGH   0      678
FGH   0      789
FGH   1      678
FGH   2      678
YUI   0      989
YUI   1      567                  
", header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...