gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:26:01 26 4
gpt4 key购买 nike

我正在尝试通过每列中 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com