1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】主成分分析:colMeans(x, na.rm = TRUE)のエラー:'x'は数値でなければなりません。

2022-01-10 23:39:18

質問

主成分分析を実行しているのですが、エラーが発生します。

Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

はすべて数値でなければなりませんが、データセットに文字オブジェクトがある場合はどのように処理すればよいのでしょうか。例えば

data(birth.death.rates.1966)
data2 <- birth.death.rates.1966
princ <- prcomp(data2)

  • data2 以下のデータの例です。

国名を数値で参照する列を新たに追加した方が良いでしょうか?もしそうなら、Rでこれを行うにはどうすればよいですか?

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

を経由することで、文字ベクトルを数値に変換することができます。 factor . そして、それぞれのユニークな値には、ユニークな整数コードが付けられます。この例では、4つの値があるので、番号は1から4まで、アルファベット順になっていると思います。

> d = data.frame(country=c("foo","bar","baz","qux"),x=runif(4),y=runif(4))
> d
  country          x         y
1     foo 0.84435112 0.7022875
2     bar 0.01343424 0.5019794
3     baz 0.09815888 0.5832612
4     qux 0.18397525 0.8049514
> d$country = as.numeric(as.factor(d$country))
> d
  country          x         y
1       3 0.84435112 0.7022875
2       1 0.01343424 0.5019794
3       2 0.09815888 0.5832612
4       4 0.18397525 0.8049514

その後 prcomp :

> prcomp(d)
Standard deviations:
[1] 1.308665216 0.339983614 0.009141194

Rotation:
               PC1          PC2          PC3
country -0.9858920  0.132948161 -0.101694168
x       -0.1331795 -0.991081523 -0.004541179
y       -0.1013910  0.009066471  0.994805345

これがあなたのアプリケーションで意味をなすかどうかは、あなた次第です。もしかしたら、最初のカラムを削除したいだけかもしれません。 prcomp(d[,-1]) 他の回答者が目指しているのは、数値データを扱うことだと思われます。