2017-11-25 36 views
1

象征是汽车的保险风险评级。levels()不接受负值。任何解决方法?

str(carprice$symboling) 

$ symboling:系数W/6水平 “-2”, “ - 1”, “0”,..:6 6 4 5 5 5 4 4 4 3 ...

levels(carprice$symboling)[-2:-1] <- "safe" 
levels(carprice$symboling)[0:1] <- "mild risky" 
levels(carprice$symboling)[2:3] <- "risky" 

str(carprice$symboling) 

$符号:具有“轻微风险”,“有风险”的因子w/2级别:2 2 2 2 2 2 2 2 2 2 ...

为什么预计不到负数级别?

+0

注意引号'“-2”'在输出 - 'levels'是'character'矢量,而不是索引 – MichaelChirico

回答

2

R中的索引从1开始。它表示值在vector中的位置。它可以是data.frame,matrix中的列索引或行索引。在这里,我们试图根据已经存在的层次的位置,将'符号'列的levels分配给一个特定的值。假设水平在-2顺序:3,前两个层次将被分配到“安全”,然后在接下来的2到“轻度危险”,最后2“风险”

levels(carprice$symboling)[1:2] <- "safe" 
levels(carprice$symboling)[3:4] <- "mild risky" 
levels(carprice$symboling)[5:6] <- "risky" 

这可以在一个单一步骤中进行过

levels(carprice$symboling) <- setNames(rep(c('safe', 'mild risky', 'risky'), each = 2), 
       -2:3)[levels(carprice$symboling)] 

由于重复的例子

set.seed(24) 
v1 <- factor(sample(-2:3, 20, replace = TRUE)) 
levels(v1) <- setNames(rep(c('safe', 'mild risky', 'risky'), each = 2), -2:3)[levels(v1)] 
相关问题