我有以下变量
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)。
我将使用的实际数据每个数据帧都有数千行
答案 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