Я хотел бы создать матрицу индикаторных переменных. Моя первоначальная мысль состояла в том, чтобы использовать model.matrix, который также был предложен здесь: -1-0-indicator-variables">Автоматическое расширение R-фактора в набор индикаторных переменных 1/0 для каждого уровня фактора
Однако model.matrix не работает, если фактор имеет только один уровень.
Вот пример набора данных с тремя уровнями фактора «регион»:
dat = read.table(text = "
reg1 reg2 reg3
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
0 1 0
0 1 0
0 1 0
0 0 1
0 0 1
0 0 1
0 0 1
", sep = "", header = TRUE)
# model.matrix works if there are multiple regions:
region <- c(1,1,1,1,1,1,2,2,2,3,3,3,3)
df.region <- as.data.frame(region)
df.region$region <- as.factor(df.region$region)
my.matrix <- as.data.frame(model.matrix(~ -1 + df.region$region, df.region))
my.matrix
# The following for-loop works even if there is only one level to the factor
# (one region):
# region <- c(1,1,1,1,1,1,1,1,1,1,1,1,1)
my.matrix <- matrix(0, nrow=length(region), ncol=length(unique(region)))
for(i in 1:length(region)) {my.matrix[i,region[i]]=1}
my.matrix
Цикл for эффективен и кажется достаточно простым. Тем не менее, я изо всех сил пытался придумать решение, которое не включает циклы. Я могу использовать петлю выше, но изо всех сил пытаюсь отучить себя от них. Есть ли способ лучше?