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

如何在不使用R中的循环的情况下编写此指标矩阵,r,for-loop,matrix,indicator,R,For Loop,Matrix,Indicator,我有一个由数字序列给出的因子向量。这些因素也存在于单独的数据集A中,称为test\u set和train\u set。下面的代码所做的是查找数据集中的因子在因子向量中的匹配位置,并将1放在矩阵的位置。将该矩阵composite\u test乘以test\u set$composite应该会得到comp test_set <- data.frame(Compound=letters[sample(1:3,10,replace = TRUE)]) train_set <- data.fr

我有一个由数字序列给出的因子向量。这些因素也存在于单独的数据集A中,称为
test\u set
train\u set
。下面的代码所做的是查找数据集中的因子在因子向量中的匹配位置,并将1放在矩阵的位置。将该矩阵
composite\u test
乘以
test\u set$composite
应该会得到
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}

test\u set更简单的选项是
model.matrix
from
base R

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

或者,如果我们使用行序列
cbind
,也可以使用
table

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