web-dev-qa-db-ja.com

data.frameのstringsAsFactors設定を変更する

ループを使用してデータを入力するdata.frameを定義する関数があります。ある時点で、警告メッセージが表示されます。

警告メッセージ:1:In [<-.factor*tmp*、iseq、value = "CHANGE"):無効な因子レベル、生成されたNA

したがって、data.frameを定義するときに、オプションstringsAsFactorsFALSEに設定したいのですが、その方法がわかりません。

私が試してみました:

DataFrame = data.frame(stringsAsFactors=FALSE)

また:

options(stringsAsFactors=FALSE)

StringsAsFactorsオプションを設定する正しい方法は何ですか?

27
VincentH

コードを指定していないデータフレームをどのように埋めるかによって異なります。新しいデータフレームを作成するとき、次のようにできます。

x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE)

この場合、if e.g. aVectorは文字ベクトルであり、データフレーム列x$aNameも文字ベクトルであり、因子ベクトルではありません。これを既存のデータフレームと組み合わせて(rbindcbindなどを使用)、そのモードを保持する必要があります。

実行するとき

options(stringsAsFactors = FALSE)

グローバルなデフォルト設定を変更します。そのため、その行の実行後に作成するすべてのデータフレームは、明示的にそうするように指示されない限り、因子に自動変換されません。単一の場所での変換を回避する必要がある場合は、デフォルトを変更しないでください。ただし、これがコード内の多くの場所に影響する場合は、デフォルトを変更することをお勧めします。

もう1つ:ベクトルalreadyに因子が含まれている場合、上記のどちらもそれを文字ベクトルに戻しません。これを行うには、as.characterなどを使用して明示的に元に戻す必要があります。

38
MvG