0
各列のレベルを詳述するデータフレームに要約行を追加しようとしています。フレーム全体でレベル関数を適用する際に問題が発生しました。私は、その理由が個別に扱わ列は因子ベクトルとして扱われることであると思うが、適用機能を使用する場合、それらは文字として扱われます。データフレームの列がサブセット化されて適用されるときにクラスを変更するのはなぜですか?
levels(df[,1])
[1] "a" "b" "c"
apply(df, MARGIN=2, levels)
NULL
:私は、問題の原因だと思う
a = c("a","b","c")
b = c("d","e","f")
m = cbind(a,b)
df = as.data.frame(m)
class(df[,1])
[1] "factor"
apply(df, MARGIN=2, class)
a b
"character" "character"
私は、適用、データフレーム、およびウェブのヘルプドキュメントを見てきました。誰かがこれがなぜなのか説明できますか?
apply'がmatrix' 'にあなたのdata.frameを強制的に変換し、それらが唯一、すべての「列」で1つのクラスを持つことができます'ので、これが起こる(彼らはしているので、 –
そして '?matrix'から: 'as.matrix'のデフォルトのメソッドは 'as.vector(x)'を呼び出します。ファクタを文字ベクトルに強制します。 –
最初に適用して、すべてのデータが数値かどうかを確認します。それが 'as.matrix'を呼び出すならば。そうでなければ 'as.array'を呼び出します。しかし、 'as.array'は@WeihuangWongが示した変換を行う' as.vector'を呼び出します。 –