【问题标题】:Column comparison with varying id's与不同 id 的列比较
【发布时间】:2019-07-02 23:51:30
【问题描述】:

我有以下变量

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 的数字 1 与数字 2 有多少匹配。给定 id 的频率在同一数据帧内以及与其他数据帧相比时可能会有所不同。

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

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

    一种方法是加入两个数据框,然后检查哪些 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
    

    【讨论】:

    • 唯一的问题是,如果两个数据帧中至少有两个相同的 id,我无法知道是否发生了错误。
    • 我看到了您编辑的问题,但我并没有完全得到您想要的最终结果,NA 在这里表示什么?
    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2015-04-20
    相关资源
    最近更新 更多