Проверка наличия значений в нескольких наборах данных - PullRequest
1 голос
/ 22 февраля 2020

У меня есть несколько таблиц, и все столбцы "a" таблиц должны иметь одинаковые значения для анализа, который я провожу. Фактические таблицы очень большие, поэтому я буду использовать упрощенные (фиктивные) фреймы данных.

Допустим, у меня есть следующие данные:

A <- data.frame(a = c(3,4,5,6,7,8), b = c(4,5,6,7,8,9), c = c(5,6,7,8,9,10))

B <- data.frame(a = c(2,3,4,5,6,7), b = c(4,5,6,7,8,9), c = c(5,6,7,8,9,10))

C <- data.frame(a = c(1,2,3,4,5,6), b = c(4,5,6,7,8,9), c = c(5,6,7,8,9,10))

D <- data.frame(a = c(4,5,6,7,8,9), b = c(4,5,6,7,8,9), c = c(5,6,7,8,9,10))

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

Чтобы иметь одинаковые значения в столбце "a" для всех таблиц A, B и C, я мог бы используйте следующие операции:

A <- A[A$a %in% B$a,]
B <- B[B$a %in% A$a,]
C <- C[C$a %in% B$a,]
B <- B[B$a %in% C$a,]
A <- A[A$a %in% C$a,]

Это уже становится очень утомительным, как вы можете видеть. Что если я добавлю таблицу D или другие кадры данных в этом миксе? Это становится практически невозможным, поскольку каждая таблица содержит хотя бы одно уникальное значение.

1 Ответ

0 голосов
/ 22 февраля 2020

Один dplyr параметр может быть:

bind_rows(list(A, B, C, D), .id = "ID") %>%
 mutate(n_datasets = max(ID)) %>%
 group_by(a) %>%
 filter(n_distinct(ID) == n_datasets)

   ID        a     b     c n_datasets
   <chr> <dbl> <dbl> <dbl> <chr>     
 1 1         4     5     6 4         
 2 1         5     6     7 4         
 3 1         6     7     8 4         
 4 2         4     6     7 4         
 5 2         5     7     8 4         
 6 2         6     8     9 4         
 7 3         4     7     8 4         
 8 3         5     8     9 4         
 9 3         6     9    10 4         
10 4         4     4     5 4         
11 4         5     5     6 4         
12 4         6     6     7 4  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...