【问题标题】:Match data and count number of same value匹配数据并计算相同值的个数
【发布时间】:2017-01-17 07:02:19
【问题描述】:

我有两个数据集(数据框)。我想根据每个列名找到这些数据集之间的匹配值。

intput1 <- structure(list(A = c(1L, 0L, 1L, 0L), B = c(2L, 2L, 1L, 1L), 
C = c(3L, 1L, 1L, 3L)), .Names = c("A", "B", "C"), class = "data.frame", 
row.names = c("1", "2", "3", "4"))

#     A    B   C
#1    1    2   3
#2    0    2   1
#3    1    1   1
#4    0    1   3

input2 <- structure(list(A = c(1L, 3L, 1L, 0L), B = c(1L, 2L, 0L, 1L), 
C = c(2L, 2L, 1L, 2L)), .Names = c("A", "B", "C"), class = "data.frame", 
row.names = c("1", "2", "3", "4"))

#     A    B   C
#1    1    1   2
#2    3    2   2
#3    1    0   1
#4    0    1   2

预期输出:

#     colnames.1   colnames.2   match
#1             A           A        3
#2             A           B        1
#3             A           C        1
#4             B           A        1
#5             B           B        2
#6             B           C        2
#7             C           A        1
#8             C           B        0
#9             C           C        1

最后一列是匹配的数量。

【问题讨论】:

    标签: r dataframe match


    【解决方案1】:

    这是一种可能性:

    f <- function (x, y) sum(x == y)
    
    oo <- outer(input1, input2, Vectorize(f))
    
    #  A B C
    #A 3 1 1
    #B 1 2 3
    #C 1 0 1
    
    as.data.frame.table(oo)
    
    #  Var1 Var2 Freq
    #1    A    A    3
    #2    B    A    1
    #3    C    A    1
    #4    A    B    1
    #5    B    B    2
    #6    C    B    0
    #7    A    C    1
    #8    B    C    3
    #9    C    C    1
    

    【讨论】:

    • oo.df &lt;- as.data.frame.table(oo); oo.df[order(oo.df$Var1),] ;-)
    • 我知道你知道,所以;-)(我只是为 OP 添加的)
    • ;-) 是一个眨眼的笑脸
    猜你喜欢
    • 2019-09-25
    • 2020-07-05
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多