2017-01-30 12 views
1

いくつかのワークフローの後に出力として表形式のデータを取得しましたが、この出力はS4Vectors::DataFrameクラスに格納されていました。私は、因数分解された列を整数に変換しようと考えています。はい、私はas.integerを使用して係数を落とそうとしましたが、行列があります。私はそれらをDataFrameのオブジェクトに入れておきたい。どのように整数に因子を変換した後、元のクラスの型を保持する方法を教えてもらえますか?S4 'DataFrame`で因子を整数に変換する方法は?

私はDataFrameで、この表形式のデータを得た: (実行DF前に、S4Vectorsのインストールが必要とされている:library(S4Vectors)

DF <- DataFrame(
    query=factor(c(7,17,15,4,7,15,13,19,4,6,13,19,6,11,17,10,11,10)), 
    subject=factor(c(7,17,15,4,21,21,13,13,20,20,19,19,6,11,9,1,18,10)), 
    score=c(4,4,7,8,11,11,12,12,13,13,13,13,15,21,38,48,49,54) 
) 

私は、このようにしてみました:

res <- sapply(DF, function(x) { 
    if(is.factor(x)) 
     as.integer(x) 
    x 
}) 

私の解決策が望まれていませんresは行列になり、コードは非効率的なビットなので、私のために。私はこれについて最も簡単で最短の答えを出したいと思います(これを実現するための1行のコードのみ)。 factor列を整数に変換した後、それをDataFrameとして保存します。

私はそれを保つ特別な理由があることに注意してください。DataFrame。私は可能な限りシンプルなソリューションを作るつもりです(計算上安く効率的です)。

これは私の所望の出力です:

desiredDF <- DataFrame(
    query=as.integer(c(7,17,15,4,7,15,13,19,4,6,13,19,6,11,17,10,11,10)), 
    subject=as.integer(c(7,17,15,4,21,21,13,13,20,20,19,19,6,11,9,1,18,10)), 
    score=c(4,4,7,8,11,11,12,12,13,13,13,13,15,21,38,48,49,54) 
) 

DataFrameクラスに保管しながら、どのように私は整数にDFで因数分解列を変換することができますか?これを実現させるための考え方は?どうもありがとう:)

答えて

0

あなたは

res <- data.frame(sapply(DF, function(x) { 
    if(is.factor(x)) 
     as.integer(x) 
    x 
})) 
+0

非常に接近していたが、私はこれを成し遂げるためにさらに多くの最も単純な方法を必要としています。これは1つのラインコードだけを行うことは可能ですか?上記のコードを単純化する関数はありますか? – datageek

+0

Dunno man、 'sapply'は実際にはかなり効率的です。この関数は柔軟性を提供するので、 'colnames'の' data.frame'でも使用できます。 – JustGettinStarted

関連する問題