具有不同ID的列比较

时间:2019-02-08 17:26:14

标签: r

我有以下变量

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)

我正在寻找一种基于相似ID来查看digits1与digits2有多少匹配的方法。给定id的频率可以在同一数据帧内以及与其他数据帧比较时发生变化。

如果给定ID的id1的频率高于id2,我不希望它计算出额外的不正确或正确的值。例如,当比较df1中的前三个数字与df2中的仅前两个数字时,返回向量会将其视为1个正确,1个错误和1个NA。我正在尝试合并两个数据框,并为匹配的结果添加新列。

在df1和df2中的列对齐并合并到新的数据帧后,我想向新的数据帧添加一个向量(0,NA,1,0,0,1,NA,NA)。

我将使用的实际数据每个数据帧都有数千行

1 个答案:

答案 0 :(得分:0)

一种方法是将两个数据框合并,然后检查哪些ID具有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