[解決済み] Rのファクター: 迷惑以上?
質問
Rの基本的なデータ型の1つにfactorがあります。私の経験では、因子は基本的に苦痛であり、私はそれらを使用することはありません。私はいつも文字に変換します。なんか妙に物足りない気がする。
因数データ型が必要になるような、グループ化変数として因数を使用する関数の重要な例はありますか?私が べきです。 を使用する必要がありますか?
どのように解決するのですか?
要因を使うべきです。確かに面倒ですが、私の理論では、面倒である理由の90%は
read.table
と
read.csv
は、引数
stringsAsFactors = TRUE
をデフォルトで使用します(そして、ほとんどのユーザーはこの微妙な点を見逃してしまいます)。私がこれらが有用であると言うのは、lme4のようなモデルフィッティングパッケージが、モデルを差動的に適合させ、使用する対照の種類を決定するために因子や順序付き因子を使用するからです。また、グラフ作成パッケージもグループ分けのためにこれらを使用します。
ggplot
というように、ほとんどのモデルフィッティング関数が文字ベクトルを因子に変換しているので、結果は同じです。しかし、結局はコードに警告が表示されることになります。
lm(Petal.Length ~ -1 + Species, data=iris)
# Call:
# lm(formula = Petal.Length ~ -1 + Species, data = iris)
# Coefficients:
# Speciessetosa Speciesversicolor Speciesvirginica
# 1.462 4.260 5.552
iris.alt <- iris
iris.alt$Species <- as.character(iris.alt$Species)
lm(Petal.Length ~ -1 + Species, data=iris.alt)
# Call:
# lm(formula = Petal.Length ~ -1 + Species, data = iris.alt)
# Coefficients:
# Speciessetosa Speciesversicolor Speciesvirginica
# 1.462 4.260 5.552
警告メッセージ で
model.matrix.default(mt, mf, contrasts)
:変数
Species
に変換されfactor
一つ厄介なのは、全体の
drop=TRUE
のビットです。ベクトルでは、これはデータにない因子のレベルを削除するためにうまく機能します。例えば
s <- iris$Species
s[s == 'setosa', drop=TRUE]
# [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# Levels: setosa
s[s == 'setosa', drop=FALSE]
# [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# Levels: setosa versicolor virginica
しかし
とはいえ
data.frame
の動作は
[.data.frame()
の動作は異なります。
このメール
または
?"[.data.frame"
. 使用方法
drop=TRUE
で
data.frame
は想像した通りには動作しません。
x <- subset(iris, Species == 'setosa', drop=TRUE) # susbetting with [ behaves the same way
x$Species
# [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# [41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
# Levels: setosa versicolor virginica
幸いなことに、要素を簡単に削除することができます。
droplevels()
を使用して、個々の因子や各因子の未使用の因子レベルを削除することができます。
data.frame
を削除することができます (R 2.12以降)。
x <- subset(iris, Species == 'setosa')
levels(x$Species)
# [1] "setosa" "versicolor" "virginica"
x <- droplevels(x)
levels(x$Species)
# [1] "setosa"
これは、選択したレベルを入れないようにする方法です。
ggplot
の伝説があります。
内部的には
factor
は整数で、属性レベルの文字ベクトル (
attributes(iris$Species)
と
class(attributes(iris$Species)$levels)
というように)、これはきれいです。もし、レベル名を変更しなければならない(しかも文字列を使っている)場合、これは
much
となり、効率が悪くなります。そして、私はレベル名をよく変更し、特に
ggplot
のような伝説があります。文字ベクトルで要素をごまかすと、1つだけ要素を変えてしまって、誤って別の新しいレベルを作ってしまう危険性があります。
関連
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
[解決済み] パッケージ 'xxx' は利用できません (for R version x.y.z) 」という警告にどのように対処したらよいですか?
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] ggplotで凡例のタイトルを変更する方法
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】data.frameのカラムを因子から文字に変換する
-
[解決済み】set.seed関数を使用する理由
-
[解決済み] テーブルをデータフレームに変換する方法
-
[解決済み] 2つの単語の最初の文字を大文字にします。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
R言語における共通関数
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] R および RStudio のコンソールをクリアする関数
-
[解決済み] R:自然対数を使った方程式をnlsで使う
-
[解決済み] 情報を損なわずに因数を整数値に変換するには?
-
[解決済み] パッケージ 'xxx' は利用できません (for R version x.y.z) 」という警告にどのように対処したらよいですか?
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み】R関数でオプション引数を指定する "正しい "方法
-
[解決済み] ggplot2 で個々のファセットにテキストをアノテートする