2012-01-14 11 views
1

フィールドが科学記法の数字から派生した文字列行列があります。文字マトリックスをデータフレームに変換し、数値フィールドで作業したいと思います。行列をデータフレームに変換する間、Rは文字列を因子に変換します。これは、数値の真中の 'e'文字のためかもしれません。 stringAsFactors()オプションがFALSEに設定されている場合、列は文字のままになるため、数値ではありません。例えばRデータフレーム:科学記号表記文字列を含む行列の数値への変換を制御する方法

> m 
    [,1] [,2] 
[1,] "1e-07" "4e-06" 
[2,] "2e-05" "5e-05" 
[3,] "0.03" "1e-07" 
> data.frame(m) 
    X1 X2 
1 1e-07 4e-06 
2 2e-05 5e-05 
3 0.03 1e-07 
> class(data.frame(m)) 
[1] "data.frame" 
> df = data.frame(m) 
> df 
    X1 X2 
1 1e-07 4e-06 
2 2e-05 5e-05 
3 0.03 1e-07 
> class(df$X1) 
[1] "factor" 
> class(df$X2) 
[1] "factor" 

どのように私は数値としてこれらの文字列を解釈するために、データフレームを強制することができますか? data.matrix()は実際に科学的表記法の文字列を数値に変換しますが、中間のdata.matrix()変換ステップを経ることなく、文字マトリックスをデータフレーム変換に直接制御する方法があるかどうかを知りたいと思います。

答えて

7

最初に数値行列に変更する必要があります。次にをdata.frameにします。

# A string matrix 
m <- matrix(as.character(runif(6)),3) 

# as.data.frame doesn't turn it into numbers... 
str(as.data.frame(m)) # factors 
str(as.data.frame(m, stringsAsFactors=FALSE)) # strings 

d <- m 
# Make it numeric first 
mode(d) <- "numeric" 

# Now turn it into a data.frame... 
d <- as.data.frame(d) 
str(d) # numeric 

str(m) # still strings... 

...しかし、行列の値を最初の場所に文字列として格納しない方が良いでしょう。あなたがそれらをファイルからロードしない限り、何らかの理由があってはなりません。他の操作から文字列として取得した場合は、その操作を振り返り、数値モードの損失を避ける方法を確認する必要があります。

+0

私はdata.matrix()を使用しています。マトリックス変換のステップを避ける方法はありますか?科学的表記が含まれていない場合、データフレーム変換は文字列の数字を数値に変換します。 –

+0

...これを例に挙げる必要があります。私はそれを再現することはできません。私は上記の例を更新しました。科学的な表記は関係ありません。 'as.data.frame'はまだ要素または文字列を作成します... – Tommy

+0

編集した拡張例を参照してください –

関連する問題