我试图理解为什么这个R代码会进行某种转换。
Df[,"cutoff"] = as.numeric(levels(Df[,"cutoff"]))[Df[,"cutoff"]]
以前,Df [,“cutoff”]是一个有49个等级的因子,现在在这个操作之后,它是一个向量。我根本不理解这种语法。 as.numeric(级别(Df [,“cutoff”]))对一个因素有什么影响吗?
谢谢!
答案 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