我的任务是计算调查中四个变量的标准差和方差。其中两个变量是数字变量,但另外两个变量不是。我运行了以下代码:
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和sex)的答案是否正确,但我想知道它是如何得出答案的?
答案 0 :(得分:3)
正如警告消息所示,这是应该避免的,但如果你有一个因素
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=1
,b=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