2017-01-16 54 views
2

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

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 

其中最后一列是匹配的数目。

回答

3

这里是一个可能性:

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 
+1

'oo.df < - as.data.frame.table(OO); oo.df [order(oo.df $ Var1),]';-) – Jaap

+0

我知道你知道,因此';-)'(我刚刚添加它为OP) – Jaap

+1

';-)'是一个眨眼笑脸 – Jaap