1

Rの列ごとの各因子の数を見つけることができるコードを作成しようとしていますが、各列で因子レベルを同じにするという制限があります。これは些細なことだと思いましたが、apply with factor を使用した場合と apply with table を使用した場合に、R が期待する値をまったく返さない 2 つの場所に遭遇しています。

次のサンプル データを検討してください。

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))

私の最初のステップは、因子水準が同じになるように各列を再水準化することでした。最初に私は試しました:

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]))

これら2つのケースで何が起こっているのか誰か説明してくれませんか? 私は何を誤解していますか?

4

1 に答える 1

3

の詳細セクションの最初の文を読んで?applyから、実行as.matrix(mat.factor)して問題を確認してください。lapplyではなく、データ フレームに使用しますapply

次に例を示します。

mat.factor <- as.data.frame(lapply(mat.factor,factor,levels = mat.levels))
lapply(mat.factor,table)
于 2012-12-27T16:54:13.523 に答える