r - 检查矩阵中的至少 2 列是否至少有 3 个值...但它们必须在同一行中(用于成对测试)

标签 r matrix missing-data

假设我有一个如下矩阵:

set.seed(123)
newmat=matrix(rnorm(25),ncol=5)
colnames(newmat)=paste0('mark',1:5)
rownames(newmat)=paste0('id',1:5)
newmat[,2]=NA
newmat[c(2,5),4]=NA
newmat[c(1,4,5),5]=NA
newmat[1,1]=NA
newmat[5,3]=NA

> newmat
          mark1 mark2     mark3      mark4      mark5
id1          NA    NA 1.2240818  1.7869131         NA
id2 -0.23017749    NA 0.3598138         NA -0.2179749
id3  1.55870831    NA 0.4007715 -1.9666172 -1.0260044
id4  0.07050839    NA 0.1106827  0.7013559         NA
id5  0.12928774    NA        NA         NA         NA

我想在这里以简单的方式检查的唯一一件事是,至少有 2 列具有 3 个值,而且这些列的值在相同的行中...

在上面的例子中,我有一对第 1 列和第 3 列,以及一对第 3 和第 4 列……第 1 和第 4 对不满足这个要求。总共 3 列。

如何在 R 中进行此检查?我知道我会做一些涉及 colSums(!is.na(newmat)) 的事情,但不确定其余的......谢谢!

最佳答案

这是一个矩阵(通过使用 crossprod + is.na 获得),显示了哪些对满足您的目标

> `diag<-`(crossprod(!is.na(newmat)), 0) >= 3
      mark1 mark2 mark3 mark4 mark5
mark1 FALSE FALSE  TRUE FALSE FALSE
mark2 FALSE FALSE FALSE FALSE FALSE
mark3  TRUE FALSE FALSE  TRUE FALSE
mark4 FALSE FALSE  TRUE FALSE FALSE
mark5 FALSE FALSE FALSE FALSE FALSE

我们可以看到,(mark1, mark3)(mark3, mark4) 对是期望的输出。

关于r - 检查矩阵中的至少 2 列是否至少有 3 个值...但它们必须在同一行中(用于成对测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71735615/

相关文章:

氧气 : export imported function

r - 使用SF包溶解面要素

c++ - Rcpp 更新通过引用传递的矩阵并返回 R 中的更新

r - 在R中填充缺失值时间序列数据

r - 如何在ggplot2中的堆叠条组之间放置空间

r - 如何使用 rmarkdown 使 plotly 图表适应页面宽度?

python - 如何使用 python 在循环语句内创建多个矩阵?

performance - 没有 for 循环的求和 - MATLAB

python - 检查我的时间序列索引数据是否有工作日的缺失值

python - 如何使用每个向量条目来填充数据帧中单独组的 NAN