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)
4

2 回答 2

0

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

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)})})
于 2019-10-13T09:19:53.403 回答
0

以下是获取每行第一条记录的行和列索引的几种方法,即 0。

aggregate(col ~ row,
          data = which(dimMat == 0, arr.ind = T),
          FUN = function(x) x[1])

complete_rows <- rowSums(dimMat) < ncol(dimMat)

cbind(row = seq_len(nrow(dimMat))[complete_rows],
      col = apply(dimMat == 0, 1, which.max)[complete_rows])

要找到每列 0 的第一条记录,这将非常相似:

aggregate(row ~ col,
          data = which(dimMat == 0, arr.ind = T),
          FUN = function(x) x[1])

complete_cols <- colSums(dimMat) < nrow(dimMat)

cbind(col = seq_len(ncol(dimMat))[complete_cols],
      row = apply(dimMat == 0, 2, which.max)[complete_cols])
于 2019-10-13T13:30:53.280 回答