R:R中因子转换为数字错误

时间:2014-04-18 15:55:11

标签: r

我的代码中出现了以下奇怪的行为。 这是我的因素对象:

R> pointsraw
[1] 2                 7                 6                 10                2/1-1/0.5        
[6] 1                 0.500000000000000 3                 1                 8                
[11] 7/1-5/0.7-3/0.4   3                 3/2-2/1           11/5-9/3-5/1      4                
[16] 4                 4/2/0             80                4/0               20               
[21] 2                 4/1-3/0.5        
18 Levels: 0.500000000000000 1 10 11/5-9/3-5/1 2 2/1-1/0.5 20 3 3/2-2/1 4 4/0 4/1-3/0.5 4/2/0 6 ... 80

这是第一个条目

R> pointsraw[[1]]
[1] 2
18 Levels: 0.500000000000000 1 10 11/5-9/3-5/1 2 2/1-1/0.5 20 3 3/2-2/1 4 4/0 4/1-3/0.5 4/2/0 6 ... 80

到目前为止一直很好,但出现了惊喜:

R> as.numeric(pointsraw[[1]])
[1] 5

问题,为什么会发生这种情况? 2怎么变成5?

1 个答案:

答案 0 :(得分:0)

在R中,因子不一定映射到它们各自的数字,因为因子只是标签(它们可能是字符)。这是一个例子:

obs = as.factor(sample(sample(1:100,3),20,replace=T))
as.numeric(obs)

给出:

> obs
 [1] 72 72 72 77 77 72 12 77 12 72 12 72 12 12 72 77 12 77 77 77
Levels: 12 72 77
> as.numeric(obs)
 [1] 2 2 2 3 3 2 1 3 1 2 1 2 1 1 2 3 1 3 3 3

以下是一些让您玩各种因素的功能:

# dropping and setting levels
Z = as.factor(sample(LETTERS[1:5],20,replace=T))
levels(Z)
Y = as.factor(Z[-which(Z %in% LETTERS[4:5])])
levels(Y)
Y=droplevels(Y) # drop the levels
levels(Y)
levels(Y) = levels(Z) # bring them back
levels(Y)
Y = factor(Y,levels=LETTERS[1:7]) # expand them
levels(Y)
attr(Y,"levels")
attr(Y,"levels") = LETTERS[1:8] # keep expanding them
levels(Y)
require(plyr)
Y = mapvalues(Y,levels(Y),letters[1:length(levels(Y))]) # change the labels of the levels
levels(Y)
x<-factor(Y, labels=LETTERS[(length(unique(Y))+1):(2*length(unique(Y)))]) # change the labels of the levels on another variable