Сравнение столбцов с разными идентификаторами - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующие переменные

id1 = c(1,1,1,2,3,4,4,5)

id2 = c(1,1,2,2,3,3,4)

digit1 = c(243, 888, 343, 276, 493, 024, 305, 093)

digit2 = c(343, 756, 947, 089, 390, 930, 024)

df1 = data.frame(id1, digit1)

df2 = data.frame(id2, digit2)

Я ищу способ узнать, сколько совпадений у цифр1 с цифрами2 на основе похожих идентификаторов.Частота для данного идентификатора может изменяться в пределах одного и того же кадра данных, а также по сравнению с другим кадром данных.

Я не хочу, чтобы он подсчитывал дополнительные неверные или правильные значения, если id1 имеет большую частоту, чем id2 для данного идентификатора.Например, при сравнении первых трех цифр в df1 только с первыми двумя цифрами в df2 возвращаемый вектор будет считать это как 1 правильное, 1 неправильное и 1 NA.Я пытаюсь объединить оба фрейма данных и добавить новый столбец для результатов сопоставления.

После выравнивания столбца в df1 и df2 и слияния в новый фрейм данных я хочу добавить вектораналогично (0, NA, 1, 0, 0, 1, NA, NA) новому кадру данных.

Фактические данные, которые я буду использовать, имеют тысячи строк для каждого кадра данных

1 Ответ

0 голосов
/ 08 февраля 2019

Один из способов сделать это - соединить два фрейма данных и затем проверить, какие идентификаторы имеют digit1 = digit2, вот что я имею в виду:

# Data from the question (before the edit)
id1 = c(1,1,2,3,4,4,5,6,7)
id2 = c(1,2,2,3,3,4,5)
digit1 = c(243, 343, 276, 493, 024, 305, 093, 393, 208)
digit2 = c(343, 947, 089, 390, 930, 024, 093)
df1 = data.frame(id1, digit1)
df2 = data.frame(id2, digit2)

library(dplyr)
df1 %>% 
  full_join(df2, by = c('id1'='id2')) %>% 
  mutate(match = (digit1 == digit2)) %>% 
  group_by(id1) %>% 
  summarise(match = sum(match))

вы получите:

#     id1  match
#    <dbl> <int>
# 1     1     1
# 2     2     0
# 3     3     0
# 4     4     1
# 5     5     1
# 6     6    NA
# 7     7    NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...