Выравнивание двух кадров данных для повышения точности сопоставления в R - PullRequest
0 голосов
/ 05 июля 2019

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

df1
ID  Chr
1   a
2   a
3   a
4   a
5   a
6   a
7   b
8   b
9   b
10  b
11  c
12  c
13  a
14  a
15  a
16  a
17  c
18  c
19  c
20  a
df2
ID Chr
1   a
2   a
3   b
4   b
5   b
6   b
7   b
8   b
9   b
10  b
11  c
12  c
13  a
14  a
15  c
16  c
17  c
18  a
19  a
20  a

Если вы посмотрите на два df, вы увидите, что они очень похожи.На самом деле, если это так, я считаю их частью одного и того же набора.Но проблема в том, что они не слишком хорошо выровнены.В этом небольшом примере это может показаться не большим делом, но с фактическими данными с более чем 1000 строками выравнивание является большой проблемой.

Проблема в том, что мой алгоритм сопоставления довольно прост и сравнивает одну строку df1 с соответствующей строкой df2 и дает оценку 1, если есть совпадение, и 0 для несоответствия.Что усложняет проблему, так это то, что я не сопоставляю все строки данных одновременно.Из-за обстоятельств я должен сделать частичные совпадения.Например, с приведенными выше данными я бы сопоставил на 5 строк.Первые пять рядов df1 против пяти рядов df2.Когда я минимизирую масштаб, проблема становится хуже.

Итак, вопрос в том, могу ли я что-то сделать с выравниванием, не прибегая к сопоставлению всего dfs сразу.

1 Ответ

2 голосов
/ 05 июля 2019

Я не уверен, правильно ли я вас понял. Если вы хотите сравнить только столбцы chr, вы можете объединить две таблицы, а затем проверить столбцы chr.

Это очень легко, если вы используете пакет dplyr. Сначала я создаю данные игрушек:

df1 <- data.frame(id = 1:5, chr = c("a", "a", "a", "b", "b"))
df2 <- data.frame(id = 1:5, chr = c("a", "b", "b", "b", "b"))

library(dplyr)
left_join(df1, df2, by = "id", suffix = c("_1", "_2")) %>% 
  mutate(flag = if_else(chr_1 == chr_2, 1, 0))

  id chr_1 chr_2 flag
1  1     a     a    1
2  2     a     b    0
3  3     a     b    0
4  4     b     b    1
5  5     b     b    1
...