R:通过仅考虑 NA 值的位置来对矩阵行进行分组的快速方法

标签 r performance matrix na

我正在尝试通过每列中 NA 值的唯一位置来对矩阵的行进行分组。

例如下面的矩阵:

1, 2, NA, 3 NA
2, 5, NA, 4, 5
3, 2,  1, 0, 7
5, 3, NA, 9, 3
0, 2,  1, 4, 6

答案是:

1, 2, 3, 2, 3

表示有 3 个不同的组,即第 2 行和第 4 行在同一个组中。

问题是我无法想出一个快速的方法来实现这一点。这是我当前的实现:

mat <- matrix(rnorm(10000*100), ncol=100)
mat[sample(length(mat), nrow(mat))] <- NA

getNAgroups <- function(x) {
  allnas  <- t(!is.na(x))
  nacases <- unique(allnas, MARGIN=2)
  groups  <- numeric(nrow(x))
  for(i in 1:ncol(nacases)) {
    groups[colMeans(allnas == nacases[,i]) == 1] <- i
  }
  groups
}

这对于我的目的来说有点太慢了:

system.time(getNAgroups(mat))
   user  system elapsed
  7.672   1.686   9.386

最佳答案

这是在 NA 位置列表上使用匹配的一种方法:

mat <- matrix(c(1, 2, NA, 3, NA,
2, 5, NA, 4, 5,
3, 2,  1, 0, 7,
5, 3, NA, 9, 3,
0, 2,  1, 4, 6), 5, byrow = TRUE)


categ <- apply(is.na(mat), 1, which)
match(categ, unique(categ))

关于R:通过仅考虑 NA 值的位置来对矩阵行进行分组的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180373/

相关文章:

r - Ggplot2 方面 : put y-axis of the right hand side panel on the right side

r - 我可以使用forecast.Arima(包预测)获得置信区间而不是预测区间吗?

java - 如何增加WildFly的堆内存?

在 R 中的参数值范围内运行 2 个参数的函数

r - 安装 RMySQL 时出错(Ubuntu 13.04 中的 MySQL 5.6.14)

javascript - 为什么我的 Javascript 动画会在一段时间后变慢

PHP 和 API 调用性能和最佳实践的一对多关系

javascript - jScript - 如何 "mirror"矩阵(多维数组)

python - 如何使用 matplotlib 创建大型子图?

在 Mac OS X 10.9 (Mavericks) 上运行 Rattle