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