如何均衡两个稀疏矩阵的列

时间:2013-06-23 09:48:10

标签: r sparse-matrix

我有两个稀疏矩阵,用于训练和测试集,我需要删除每个中不在另一个中的列 - 使两个列中的列相同。目前我正在循环播放,但我确信有一种更有效的方法:

# take out features in training set that are not in test
  i<-0
  for(feature in testmatrix@Dimnames[2][[1]]){
    i<-i+1
    if(!(feature %in% trainmatrix@Dimnames[2][[1]])){
      removerows<-c(removerows, i)
    }
  }
  testmatrix<-testmatrix[,-removerows]

# and vice versa...

1 个答案:

答案 0 :(得分:2)

对我而言,您希望所做的就是保留testmatrix中也出现在trainmatrix中的列,反之亦然。由于您希望将此应用于两个矩阵,因此快速的方法是对每个矩阵的intersect向量使用colnames以找到相交的colnames,然后将其用于子集:

#  keep will be a vector of colnames that appear in BOTH train and test matrices
keep <- intersect( colnames(test) , colnames(train) )

#  Then subset on this vector
testmatrix <- testmatrix[ , keep ]
trainmatrix <- trainmatrix[ , keep ]