2014-10-29 57 views
1

此问题与Convert factor to integerHow to convert a factor to an integer\numeric without a loss of information有关,但与类型强制的问题稍有不同。重新标记后将因子转换为数字

前两个问题似乎涉及到一个因素是明确构造的一个因素是从类或integer类的先前存在的向量没有relabicing levels。在这些情况下:

f <- factor(c("1","2","1","2")) 
as.numeric(levels(f))[f] 

回报

# [1] 1 2 1 2 

,但是当我重新标记的水平:

f <- factor(c("1","2","1","2")) 
f <- factor(f, 
      levels = c(1, 2), 
      labels = c("a", "b")) 
as.numeric(levels(f))[f] 

我会得到

# [1] NA NA NA NA 
# Warning message: 
# NAs introduced by coercion 

as.numeric(f) 

回报

# [1] 1 2 1 2 

什么是在这种情况下正确的程序,以获得原始值回?它只是as.numeric(f)

在情况下,它是相关的:

> sessionInfo() 
R version 3.1.2 RC (2014-10-28 r66890) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_IE.UTF-8  LC_NUMERIC=C 
[3] LC_TIME=en_IE.UTF-8  LC_COLLATE=en_IE.UTF-8 
[5] LC_MONETARY=en_IE.UTF-8 LC_MESSAGES=en_IE.UTF-8 
[7] LC_PAPER=en_IE.UTF-8  LC_NAME=C 
[9] LC_ADDRESS=C    LC_TELEPHONE=C 
[11] LC_MEASUREMENT=en_IE.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 
loaded via a namespace (and not attached): 
[1] tools_3.1.2 
+1

重新标记后,原始值将永远丢失。 'as.numeric()'将总是为第一级返回1,第二级为2,等等。不管实际/原始标签或值是什么。 – MrFlick 2014-10-29 17:20:06

+0

这很好。我担心在这种情况下'as.numeric()'可能以某种方式返回原始值,如果我通过使用'as.numeric()'将数据框提交给某人,在所有(因素)列上。 – 2014-10-31 13:52:47

回答

0

如果你知道一个肯定,有原来的水平,基本因素/整数编码之间的精确对应,那么你可以使用as.numeric(F) 。但是......如果原始载体是

f <- factor(c("2","3","2","3")) 

你改变了一级标签alpha值,然后as.numeric(F)将给出错误的结果。因子编码始终以1L开头。