1. ホーム
  2. r

[解決済み】データフレームのカラムを数値型に変換する方法は?

2022-03-30 11:30:08

質問

データフレームのカラムを数値型に変換する方法は?

どのように解決するのですか?

まだ)誰もチェックマークを付けていないので、何か実用的な問題があるのだと思いますが、そのほとんどは、どのようなタイプのベクトルに変換したいのかが指定されていないことです。 numeric . を適用することを提案します。 transform という関数を使って、タスクを完了させることができます。

さて、これからある「変換異常」のデモンストレーションを行います。

# create dummy data.frame
d <- data.frame(char = letters[1:5], 
                fake_char = as.character(1:5), 
                fac = factor(1:5), 
                char_fac = factor(letters[1:5]), 
                num = 1:5, stringsAsFactors = FALSE)

を見てみましょう。 data.frame

> d
  char fake_char fac char_fac num
1    a         1   1        a   1
2    b         2   2        b   2
3    c         3   3        c   3
4    d         4   4        d   4
5    e         5   5        e   5

で、実行させてください。

> sapply(d, mode)
       char   fake_char         fac    char_fac         num 
"character" "character"   "numeric"   "numeric"   "numeric" 
> sapply(d, class)
       char   fake_char         fac    char_fac         num 
"character" "character"    "factor"    "factor"   "integer" 

さて、あなたはおそらく次のように考えていることでしょう。 どこが異常なんだ? さて、私はRでかなり奇妙なことにぶつかったことがあります。 その しかし、特にベッドに入る前にこれを読むと、あなたを混乱させるかもしれません。

ここからが本題:最初の2列は character . 2をわざわざ nd fake_char . この類似性を見てください character という変数は、Dirkが彼の返信で作成したものと同じです。これは実際には numerical ベクターに変換され character . 3 rd および4 th 列は factor で、最後の1つは "purely"です。 numeric .

を利用する場合 transform 関数を使用すると fake_charnumeric を削除することはできません。 char 変数そのものです。

> transform(d, char = as.numeric(char))
  char fake_char fac char_fac num
1   NA         1   1        a   1
2   NA         2   2        b   2
3   NA         3   3        c   3
4   NA         4   4        d   4
5   NA         5   5        e   5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion

しかし、同じことを fake_charchar_fac 運が良ければ、NAなしで済むかもしれません。

> transform(d, fake_char = as.numeric(fake_char), 
               char_fac = as.numeric(char_fac))

  char fake_char fac char_fac num
1    a         1   1        1   1
2    b         2   2        2   2
3    c         3   3        3   3
4    d         4   4        4   4
5    e         5   5        5   5

を変換して保存すると data.frame をチェックし modeclass を、得ることができます。

> D <- transform(d, fake_char = as.numeric(fake_char), 
                    char_fac = as.numeric(char_fac))

> sapply(D, mode)
       char   fake_char         fac    char_fac         num 
"character"   "numeric"   "numeric"   "numeric"   "numeric" 
> sapply(D, class)
       char   fake_char         fac    char_fac         num 
"character"   "numeric"    "factor"   "numeric"   "integer"

というわけで、結論は はい、変換できます。 character ベクトルを numeric に変換できる場合のみです。 numeric . 1つだけなら character 要素に変換しようとすると、エラーが発生します。 numerical を1つにする。

そして、私の主張を証明するために。

> err <- c(1, "b", 3, 4, "e")
> mode(err)
[1] "character"
> class(err)
[1] "character"
> char <- as.numeric(err)
Warning message:
NAs introduced by coercion 
> char
[1]  1 NA  3  4 NA

では、お遊び(あるいは練習)として、これらのコマンドの出力を推測してみてください。

> fac <- as.factor(err)
> fac
???
> num <- as.numeric(fac)
> num
???

パトリック・バーンズによろしく! =)