29

このエラーを受け取ったとき、私は prcomp 関数を使用していました

Error in prcomp.default(x, ...) : 
cannot rescale a constant/zero column to unit variance

データを手動でスキャンできることはわかっていますが、これらの定数変数を削除するのに役立つ R の関数またはコマンドはありますか? これが非常に単純な作業であることは知っていますが、これを行う関数に出くわしたことはありません。

ありがとう、

4

5 に答える 5

46

ここでの問題は、列の分散がゼロに等しいことです。次のように、データ フレームのどの列が定数であるかを確認できます。

df <- data.frame(x=1:5, y=rep(1,5))
df
#   x y
# 1 1 1
# 2 2 1
# 3 3 1
# 4 4 1
# 5 5 1

# Supply names of columns that have 0 variance
names(df[, sapply(df, function(v) var(v, na.rm=TRUE)==0)])
# [1] "y" 

したがって、これらの列を除外する場合は、次を使用できます。

df[,sapply(df, function(v) var(v, na.rm=TRUE)!=0)]

編集:実際には、apply代わりに使用する方が簡単です。このようなもの :

df[,apply(df, 2, var, na.rm=TRUE) != 0]
于 2013-02-25T14:17:23.133 に答える