1
我在編寫代碼,它允許我在R中找到每列中每個因子的編號,並且限制了我希望每列中的因子級別相同。我認爲這應該是微不足道的,但我運行到兩個地方,R不會返回相當於我使用apply with factor和使用apply與table時所期望的值。找到R中每個列的每個因子的編號
考慮這樣的示例數據:
mat <- matrix(sample(1:10,90,replace=TRUE),ncol=10,nrow=9)
mat.levels <- as.character(unique(as.vector(mat)))
mat.factor <- as.data.frame(apply(mat,2,as.character))
我的第一個步驟是relevel每一列,使得因子水平是相同的。起初我想:
apply(mat.factor,2,factor,levels=mat.levels)
#But the data structure is all wrong, I don't appear to have a factor anymore!
str(apply(mat.factor,2,factor,levels=mat.levels))
所以我使用一個循環,而不是蠻力迫使它...
for (i in 1:ncol(mat.factor)) {
levels(mat.factor[,i]) <- mat.levels
}
然後我跑進與應用的另一個問題。我認爲現在我已經設置了因子水平,如果我缺少列中的給定因子,那麼表函數應該爲該因子水平返回0的計數。但是,當我使用應用程序時,它看起來像零點數的因素水平被剔除了!
apply(mat.factor,2,table)$V10
str(apply(mat.factor,2,table)$V10)
#But running table just on that one column yields the expected result!
table(mat.factor[,10])
str(table(mat.factor[,10]))
有人會解釋這兩種情況下發生了什麼嗎?我錯誤地理解了什麼?
哎呀,這是非常明顯。我像數據框架一樣被拖入矩陣中,並忘記它是一種列表。 – russellpierce
@drknexus你有很多公司犯了這個錯誤。 :) – joran