两个不同数据帧的列之间的成对比较

时间:2018-01-23 20:15:53

标签: r

这是一个玩具数据框,mydf

    M1  M2  M3  M4  M5  M6  M7  M8                      
A1  2   2   1   1   1   1   0   2
A2  0   1   2   2   1   1   0   2
A3  2   0   0   1   1   0   1   1
A4  2   0   1   2   2   1   1   0
A5  1   2   0   2   2   1   0   1
A6  2   1   1   2   2   1   1   1

这是第二个数据框的屏幕截图,不匹配:

        M1      M2      M3      M4      M5  M6  M7      M8                              
A1-A2   TRUE    NA      NA      NA      NA  NA  FALSE   FALSE
A1-A3   FALSE   TRUE    NA      NA      NA  NA  NA      NA
A1-A4   FALSE   TRUE    NA      NA      NA  NA  NA      TRUE
A1-A5   NA      FALSE   NA      NA      NA  NA  FALSE   NA
A1-A6   FALSE   NA      NA      NA      NA  NA  NA      NA
A2-A1   TRUE    NA      NA      NA      NA  NA  FALSE   FALSE
A2-A3   TRUE    NA      TRUE    NA      NA  NA  NA      NA
A2-A4   TRUE    NA      NA      FALSE   NA  NA  NA      TRUE
A2-A5   NA      NA      TRUE    FALSE   NA  NA  FALSE   NA
A2-A6   TRUE    NA      NA      FALSE   NA  NA  NA      NA

现在我想定义一个函数来比较两个不匹配的数据帧[a,] == TRUE& mydf [b,]!= 1)。因此对于三重奏A1-A2 / A3,列M1的值应为TRUE,因为A1-A2的不匹配== TRUE& A3的mydf!= 1。这是我想要的结果的快照

            M1      M2      M3  M4  M5  M6  M7      M8
A1-A2/A3    TRUE    NA      NA  NA  NA  NA  FALSE   FALSE
A1-A2/A4    TRUE    NA      NA  NA  NA  NA  FALSE   FALSE
A1-A2/A5    FALSE   NA      NA  NA  NA  NA  FALSE   FALSE
A1-A2/A6    TRUE    NA      NA  NA  NA  NA  FALSE   FALSE
A1-A3/A2    FALSE   FALSE   NA  NA  NA  NA  NA      NA
A1-A3/A4    FALSE   TRUE    NA  NA  NA  NA  NA      NA
A1-A3/A5    FALSE   TRUE    NA  NA  NA  NA  NA      NA
A1-A3/A6    FALSE   FALSE   NA  NA  NA  NA  NA      NA

我似乎无法找到我用作工作代码模型的问题,但这里有一些类似的帖子Count Number of Pairwise Differences...; Compare all the columns pairwise...; Pairwise ... ignoring empty values。通过识别0/2和2/0成对比较,从mydf导出不匹配。

#make a 2/0 matrix for for calculating incompatibilities
nohets <- mydf
nohets[nohets == 1] <- NA
#the incompatibility function
incompatible <- function(a,b,x)
    x[a,]!=x[b,]

我们的想法是使用相同的策略来比较mydf和不匹配。

#make a trio function
trio_id <- function(a,b,x,y)
    x[a,] == TRUE & y[b,] !=1
rows <- c(row.names(mismatches),row.names(mydf))
grid <- subset(expand.grid(Var1=rows,Var2=rows))
impossible <- t(mapply(trio_id,grid$Var2,grid$Var1,
    MoreArgs=list(x=mismatches,y=mydf)))
dimnames(impossible) <- list(paste(grid$Var2,grid$Var1,
    sep="/"),names(mydf))

这会运行,但不能提供所需的结果,而是

            M1      M2  M3  M4  M5  M6  M7      M8
A1-A2/A3    NA      NA  NA  NA  NA  NA  FALSE   FALSE
A1-A2/A4    NA      NA  NA  NA  NA  NA  FALSE   FALSE
A1-A2/A5    NA      NA  NA  NA  NA  NA  FALSE   FALSE
A1-A2/A6    NA      NA  NA  NA  NA  NA  FALSE   FALSE
A1-A3/A2    FALSE   NA  NA  NA  NA  NA  NA      NA
A1-A3/A4    FALSE   NA  NA  NA  NA  NA  NA      NA
A1-A3/A5    FALSE   NA  NA  NA  NA  NA  NA      NA
A1-A3/A6    FALSE   NA  NA  NA  NA  NA  NA      NA

我不需要计算每一个比较...我怀疑在网格&#39;中为每一个可能的比较编写代码。是我问题的根源。

1 个答案:

答案 0 :(得分:0)

这有用吗?

key($array)
相关问题