首页 > 解决方案 > 如何在 R 中的多个二进制矩阵中获得第一次出现值 0 的位置?

问题描述

我试图在通过多个 csv 文件读取的多个二进制矩阵中获取值 0 第一次出现的位置。

我得到了0的数量使用......

sapply(files_to_use, function(x) sum(x == 0))

在使用...读取所有 csv 文件后

reading_in_csv <- list.files(pattern="*.csv")
files_to_use <- lapply(reading_in_csv, read.delim)

我尝试了以下代码,但收到错误“dim(X) must have a positive length”...

find_first_0 <- function(x){which(x = 0)}
apply(files,1,find_first_0)

有人对上述内容有任何见解。我正在考虑使用 which() 来获取位置的函数,但我不了解如何一次使用多个矩阵来实现它。

给定示例矩阵...

dimMat <- matrix(0, 1000, 10)

for(i in 1:1000){
  dimMat[i, ] <- sample(c(0,1), 10, replace = TRUE, prob = c(.3, .7))
}

print(dimMat)

标签: rbinary-matrix

解决方案


这很丑陋,但我认为这就是你所追求的:

delete_empty_matrices  <-  function(matrix_list){   
  matrix_list[unlist(lapply(matrix_list, length) != 0)]
}

files_to_use <- files_to_use[!(is.na(delete_empty_matrices(files_to_use)))]

sapply(files_to_use, function(x){apply(x, 1, function(y){ifelse(length(y) > 0,
                                                                suppressWarnings(min(which(y == 0))), NA)})})

推荐阅读