这是一个玩具数据框,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;中为每一个可能的比较编写代码。是我问题的根源。
答案 0 :(得分:0)
这有用吗?
key($array)