以下は、現在の値(0; 0; 8,5; 3)を変更せずに、列「V2」を因子形式から数値に変換したいデータフレームdf1です。
df1 =
_ V1 V2 V3 X2 X3
4470 2010-03-28 0 A 21.53675 0
4471 2010-03-29 0 A 19.21611 0
4472 2010-03-30 8,5 A 21.54541 0
4473 2010-03-31 3 A NA NA
_
列「V2」はファクター形式なので、最初に文字形式に変換します:df1[,2]=as.character(df1[,2])
次に、「V2」を数値形式に変換しようとします。
df1[,2]=as.numeric(df1[,2])
このRメッセージにつながる:
_Warning message: NAs introduced by coercion
_
そして、_df[3,2]
_が「8,5」のままではなく「NA」に変更された以下のデータフレーム。
_ V1 V2 V3 X2 X3
4470 2010-03-28 0 A 21.53675 0
4471 2010-03-29 0 A 19.21611 0
4472 2010-03-30 NA A 21.54541 0
4473 2010-03-31 3 A NA NA
_
それは8,5が整数ではないという事実と関係があるかもしれません。それでも私はこの問題を解決する方法がわかりません。助けていただければ幸いです!
コンマをドットに置き換えます。ドットはRの小数を表します。それ以外の場合、Rはそれが文字であると見なし、値をNAに強制します。
次に、値を抽出するには:
as.numeric(levels(df1[,2])[df[,2]])
(訂正してくれた@ SimonO101に感謝します)
これを試して、データのコンマを置き換えてください。
fac<- c( "0" , "0" , "1,5" , "0" , "0" , "8" )
#[1] "0" "0" "1,5" "0" "0" "8"
fac <- as.numeric( sub(",", ".", fac) )
#[1] 0.0 0.0 1.5 0.0 0.0 8.0
より一般的には、因子表現ではなく、因子をその基礎となる値に変換します。
fac <- as.factor( fac )
as.numeric(fac)
#[1] 1 1 2 1 1 3
as.numeric(as.character(fac))
#[1] 0.0 0.0 1.5 0.0 0.0 8.0
ただし、これは元の値に変換する標準的な方法です
as.numeric(levels(fac))[fac]
ヘルプページから?as.factor
特に、因子に適用されるas.numericは無意味であり、暗黙の強制によって発生する可能性があります。係数fをほぼ元の数値に変換するには、as.numeric(levels(f))[f]をお勧めします。これは、as.numeric(as.character(f))よりもわずかに効率的です。
文字に変換した後、次のコード行を追加します。
df[3,2] <- 8.5
これで、文字を数値に変換できるようになります。 Rのデフォルトの小数点記号は.
ではなく,
であるため、そのステップなしで値はNAに置き換えられます。