首页 > 解决方案 > 在R中查找某些列的列号

问题描述

我有一个很大的相关矩阵,我想获得这些列的列号,其中包含 1(对角线除外)。这是我所做的不起作用:

# A toy example

m <- matrix(c(1,0,1,0,1,0,1,0,1), ncol = 3 , nrow = 3)
m <- m - diag(nrow(m)) #Removing 1's from the diagonal

col(m[which(m == 1)])

有没有针对巨大矩阵的有效解决方案?

标签: r

解决方案


碱基R

我不确定这种方式对您的情况是否有效,但您可以尝试

cols <- c()
for (i in 1:ncol(m)){
  if (any(m[,i] == 1 && !any(is.na(m[,i])))){
    cols <- c(cols,i)
  }
}
cols

[1] 1 3

dplyr风格

根据您的评论,我会m事先将其作为数据框。

m <- as.data.frame(m)
n <- m %>%
  dplyr::summarise(across(everything(), ~any(.x == 1)  )) %>%
  select_if(function(x) x == TRUE) %>%
  names 
which(colnames(m) %in% n)

[1] 1 3

推荐阅读