Хранение дубликатов на основе определенных строк в R в Tidyverse - PullRequest
0 голосов
/ 15 марта 2019

У меня есть следующие данные:

ID  Group   Interv  Book
1   Y1  G   N
1   Z1  G   B
2   Y2  G   B
2   Z2  G   B
3   Y1  G   B
3   Z1  G   B
4   Y1  G   N
5   Y2  G   B
5   Z2  G   B
6   Z1  G   B
6   Y1  G   B
7   Z1  G   B
7   Y1  G   B
8   Z1  N   B
8   Y1  N   B
9   Z1  N   B
9   Y1  N   B
10  Z1  N   B
10  Y1  N   B
11  Z1  N   B
11  Y1  N   B
12  Z1  N   B
13  Y1  G   N

Я хочу получить следующую таблицу:

ID  Group   Room    Book
2   Y2  G   B
2   Z2  G   B
3   Y1  G   B
3   Z1  G   B
5   Y2  G   B
5   Z2  G   B
6   Z1  G   B
6   Y1  G   B
7   Z1  G   B
7   Y1  G   B

Как видно из таблицы 2, я хочу сохранить идентификаторы, которыеу них есть и (Y1 Z1), и (Y2 Z2), учитывая, что Interv - это G, а book - B. Я пробовал filter в тидиверсе, но мне не удалось получить таблицу 2.

1 Ответ

0 голосов
/ 15 марта 2019

Мы можем сделать двойной filter после группировки по "ID". Сначала filter для строк, где Book - «B», а Interv - «G». Затем найдите «ID», имеющие all «Y1», «Z1» в группе или «Y2», «Z2» в группе (как @Gregor упомянул в комментариях)

df1 %>%
 group_by(ID) %>% 
 filter(Book == "B", Interv == "G") %>%
 filter(all(c("Y1", "Z1") %in% Group)| all(c("Y2", "Z2") %in% Group))
# A tibble: 10 x 4
# Groups:   ID [5]
#      ID Group Interv Book 
#   <int> <chr> <chr>  <chr>
# 1     2 Y2    G      B    
# 2     2 Z2    G      B    
# 3     3 Y1    G      B    
# 4     3 Z1    G      B    
# 5     5 Y2    G      B    
# 6     5 Z2    G      B    
# 7     6 Z1    G      B    
# 8     6 Y1    G      B    
# 9     7 Z1    G      B    
#10     7 Y1    G      B    

Или мы делаем

df1 %>% 
 group_by(ID) %>% 
 filter(all(c("Y1", "Z1") %in% Group[Book == "B" & Interv == "G"])| 
           all(c("Y2", "Z2") %in% Group[Book == "B" & Interv == "G"]))

Повторное выражение может быть создано ранее, а затем оценено

expr <- quo(Book == "B" & Interv == "G")
df1 %>% 
   group_by(ID) %>% 
   filter(all(c("Y1", "Z1") %in% Group[!!expr])| 
          all(c("Y2", "Z2") %in% Group[!!expr]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...