难以理解为什么这个R语法会起作用

时间:2015-05-28 17:11:36

标签: r

我试图理解为什么这个R代码会进行某种转换。

Df[,"cutoff"] = as.numeric(levels(Df[,"cutoff"]))[Df[,"cutoff"]]

以前,Df [,“cutoff”]是一个有49个等级的因子,现在在这个操作之后,它是一个向量。我根本不理解这种语法。 as.numeric(级别(Df [,“cutoff”]))对一个因素有什么影响吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果出于任何原因将数字作为因子,即使您看到数字,某些R函数也不会将其解释为数字。例如,摘要将计算案例数,而不是通常的六个数字。

请参阅:

Df=data.frame(cutoff=factor(rep(c(2:6),2)),y=runif(10,12,15))
str(Df)
summary(Df[,"cutoff"])
2 3 4 5 6 
2 2 2 2 2
#If you want the levels as numbers
Df[,"cutoff"] = as.numeric(levels(Df[,"cutoff"]))[Df[,"cutoff"]]
summary(Df[,"cutoff"])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      2       3       4       4       5       6

答案 1 :(得分:0)

如果因素不是显示的数字,则它是NA的向量。

df <- data.frame(cutoff = letters[1:26])
as.numeric(levels(df[,"cutoff"]))[df[,"cutoff"]]
#  [1] NA NA NA NA NA NA NA NA NA NA NA NA ...
# Warning message:
# NAs introduced by coercion 

让我们分解它,这会显示因子的级别,返回一个字符串:

levels(df[,"cutoff"])
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" ...

这会尝试将字符串转换为数字(它可以&#39; t因此返回NA

as.numeric(levels(df[,"cutoff"]))
# [1] NA NA NA NA NA NA NA NA NA NA NA NA NA ...
# Warning message:
# NAs introduced by coercion

现在,添加最后一个元素[df[,"cutoff"]],所有这一切都是factor df[,"cutoff"]的结果的子集,但由于每个元素都是NA,所以你不会看到任何元素区别。在实践中,这可能会以意外(读取:无用)的方式改变结果的顺序。

as.numeric(levels(df[,"cutoff"]))[df[,"cutoff"]]
# [1] NA NA NA NA NA NA NA NA NA NA NA NA NA ...
# Warning message:
# NAs introduced by coercion