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 和(的答案是否正确,但我想知道它是如何得出答案的?

正如警告消息所示,这是应该避免的事情,但是如果您有因素

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

该因子中的每个值都由一个整数表示。

as.numeric(x)
# [1] 1 2 3 3 4 2 1 2 1 1

这些数字由因子的levels()决定。每个级别都分配一个从 1 开始的整数。

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

所以a=1b=2

当你做var(x)时,你真的在做var(as.numeric(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

最新更新