data.frame の列を因子から文字に変換する 質問する

data.frame の列を因子から文字に変換する 質問する

データフレームがあります。これを次のように呼びましょうbob:

> head(bob)
                 phenotype                         exclusion
GSM399350 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399351 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399352 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399353 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399354 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399355 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-

このデータフレームの行を連結したいと思います (これは別の質問になります)。しかし、次のようになります:

> class(bob$phenotype)
[1] "factor"

Bobの列は因数です。たとえば、

> as.character(head(bob))
[1] "c(3, 3, 3, 6, 6, 6)"       "c(3, 3, 3, 3, 3, 3)"      
[3] "c(29, 29, 29, 30, 30, 30)"

よく分かりませんが、これらは の (カラクタクス王の宮廷の) 柱の要素のレベルを示すインデックスなのでしょうかbob? 私が必要としているものではありません。

bob不思議なことに、私は手で列をたどることができ、

bob$phenotype <- as.character(bob$phenotype)

これはうまく動作します。そして、少し入力すると、係数列ではなく文字列の data.frame を取得できます。そこで質問です。これを自動的に行うにはどうすればよいですか? 各列を手動で処理せずに、係数列の data.frame を文字列の data.frame に変換するにはどうすればよいでしょうか?

ボーナス質問: 手動アプローチが機能するのはなぜですか?

ベストアンサー1

Matt と Dirk の指示に従います。グローバル オプションを変更せずに既存のデータ フレームを再作成する場合は、apply ステートメントを使用して再作成できます。

bob <- data.frame(lapply(bob, as.character), stringsAsFactors=FALSE)

これにより、すべての変数がクラス「文字」に変換されます。係数のみを変換したい場合は、以下を参照してください。以下にマレクの解決策を示す

@hadley が指摘しているように、以下はより簡潔です。

bob[] <- lapply(bob, as.character)

どちらの場合も、lapplyはリストを出力します。ただし、R の魔法の特性により、[]2 番目のケースで を使用するとオブジェクトの data.frame クラスが保持されるため、引数 とともにbobを使用して data.frame に変換する必要がなくなります。as.data.framestringsAsFactors = FALSE

おすすめ記事