2017-04-14 16 views
1

私の仕事は、調査から4つの変数の標準偏差と分散を計算することでした。 2つの変数は数値ですが、他の2つは数値ではありません。私は、次のコードを実行:rは非数値データの標準偏差と分散をどのように計算しますか?

sapply(vclms[1:4], var) 

をVclms変数が1〜4及び列に含まれるデータフレームである(数値、それ以外の両方)全ての前述の変数を含みます。私はそれが非数値変数の分散のためのエラーを提供することが期待が、代わりに次のように得た:

> sapply(vclms[1:4], var) 
    grosswk  spend  hhldsize   sex 
8.383855e+04 4.744934e+04 1.288881e+00 2.434469e-01 
Warning messages: 
1: In FUN(X[[i]], ...) : 
    Calling var(x) on a factor x is deprecated and will become an error. 
    Use something like 'all(duplicated(x)[-1L])' to test for a constant vector. 
2: In FUN(X[[i]], ...) : 
    Calling var(x) on a factor x is deprecated and will become an error. 
    Use something like 'all(duplicated(x)[-1L])' to test for a constant vector. 

私はあなたが二つの非数値変数への回答を考えることができるかどうかはわかりません(hhldsizeと性別)正解かどうかは分かっていますが、答えがどうやって出てくるのか知りたかったのですが?警告メッセージとして

+3

推奨されていない警告:データには「factor」があり、内部的には「整数」として格納されています。あなたのデータがそれらの列の実際の '文字 'だった場合は、代わりに' var(x $ x):警告で導入されたNAs'と 'NA'の分散を参照してください。 – r2evans

+0

あなたは正しいですが、 'factor'の整数に関する数値解析は意味がありません。 (彼らは基礎となるデータが順序付けされ、適切に順序づけられた意味あるIFFであるかもしれない)。 – r2evans

答えて

2

が、これは避けるべきである何かであることを示していますが、要因

x<-factor(c("a","b","c","c","d","b","a","b","a","a")) 

を持っている場合、その要因の各値が整数で表されます。

数字は、因子のlevels()によって決定されます。各レベルは1

levels(x) 
# [1] "a" "b" "c" "d" 

から始まる整数そうa=1b=2、などあなたは、あなたが本当にvar(as.numeric(x))var(x)やっているん

が割り当てられます。これらの数値は、実際のデータでは意味がない可能性があることに注意してください。

var(x) 
# [1] 1.111111 (plus warning) 
var(as.numeric(x)) 
# [1] 1.111111 
var(c(1, 2, 3, 3, 4, 2, 1, 2, 1, 1)) 
# [1] 1.111111