【发布时间】:2018-01-23 20:15:53
【问题描述】:
这是一个玩具数据框,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
现在我想定义一个函数来比较 mismatches[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 和 mismatches。
#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
我不需要计算每个比较...我怀疑在“网格”中为每个可能的比较编写代码是我的问题的根源。
【问题讨论】:
标签: r