使用列名列表从矩阵中删除列

时间:2020-05-12 20:04:37

标签: r

我正在尝试从矩阵中删除所有colSums !=0列。使用this post,我已经接近了。

data2<-subset(data, Gear == 20) #subset off larger data matrix
 i <- (colSums(data2[,3:277], na.rm=T) != 0) #column selection in this line limits to numeric columns only 
 data3<- data2[, i]  #select only columns with non-zero colSums

这将创建一个向量i,该向量使用逻辑True / False正确标识要删除的列。但是,最后一行是通过除我有意的如果为true则包含,如果为false则排除以外的其他逻辑删除列。 目标:删除该范围内所有具有colSums == 0的列。 问题:我当前的代码似乎无法正确识别所述列 关于我失踪的建议?

更新: 添加要使用的伪数据:

a<-matrix(1:10, ncol = 10,nrow=10)
a
a[,c(3,5,8)]<-0
a
i <- (colSums(a, na.rm=T) != 0) 
 b<- a[, i] 

它在这里工作良好,所以我不确定为什么它不能在实际数据上面工作。

1 个答案:

答案 0 :(得分:1)

我们可以从colSums中获取列名,并将其与前两个列名连接,而前两个列名并没有用colSums创建条件来选择感兴趣的列

data[c(names(data)[1:2], names(which(i1)))]