0

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

# 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...
4

1 回答 1

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 ]
于 2013-06-23T10:20:44.690 回答