データフレームがあります。これを次のように呼びましょう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.frame
stringsAsFactors = FALSE