如何在不使用R的循环的情况下编码此指标矩阵

时间:2019-12-19 16:39:57

标签: r for-loop matrix indicator

我有一个由数字序列给定的因子向量。这些因素也可以在分别称为test_settrain_set的单独数据集中找到。以下代码的作用是发现数据集中的因子在因子向量中的匹配位置,并将1放在矩阵的位置。将此矩阵compound_test乘以test_set$Compound应该会给您compare_comp

test_set <- data.frame(Compound=letters[sample(1:3,10,replace = TRUE)])
train_set <- data.frame(Compound=letters[sample(1:3,10,replace = TRUE)])

compare_comp <- letters[1:3]
compound_test <- matrix(0,nrow(test_set),length(compare_comp)) # test indicator matrix
compound_train <-matrix(0,nrow(train_set),length(compare_comp))

for (i in 1:length(compare_comp)){
  compound_test[which(compare_comp[i]==test_set$Compound),i]=1
  compound_train[which(compare_comp[i]==train_set$Compound),i]=1}

R中是否有一个函数可以让我创建相同的东西而无需for循环?我已经尝试过model.matrix(~Compound,data=test_set),但是由于参考级别的原因,它不包括列,并且还会产生不需要的列名

1 个答案:

答案 0 :(得分:2)

更简单的选择是model.matrix中的base R

model.matrix(~ Compound-1, train_set)
model.matrix(~ Compound-1, test_set)

如果我们table有一系列行,也可以使用cbind

table(cbind(nr = seq_len(nrow(train_set)), train_set))