我想創建一個指標變量矩陣。我最初的想法是使用model.matrix,這也是在這裏建議的:Automatically expanding an R factor into a collection of 1/0 indicator variables for every factor level創建指標變量矩陣
但是,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循環是有效的,看起來很簡單。但是,我一直在努力想出一個不涉及循環的解決方案。我可以使用上面的循環,但一直在努力讓自己擺脫他們。有沒有更好的辦法?
+1任何人任何時候誰使用名不見經傳的但非常酷的矩陣索引功能。這是我的最愛。 – Aaron
我認爲雖然'長度(獨特(區域))'應該是'nlevels(region)';如果缺少一個級別,矩陣將不夠寬。 – Aaron
@Aaron,我從OP複製的第一行。看看'region'是如何定義的;這不是一個因素,所以我認爲'長度(唯一(區域))'是適當的。 – flodel