【问题标题】:Convert numeric vector to factor [duplicate]将数值向量转换为因子[重复]
【发布时间】:2017-09-18 11:44:49
【问题描述】:

我正在尝试将一组变量转换为因式变量: 可变质量的示例值为:3,4,5,6,7,8,9 我想要一个新的 FACTORED 变量 qual_level,它的值 low 、 medium 和 high 使得

low <- quality(3,4)
medium<- quality(5,6,7)
high<- quality(8,9)

因此我尝试实现以下代码。

q_levels <-  a <- factor (white_wine$quality ,
                      c(3,4,5.6,7,8,9,10), 
                      levels=1:3, 
                      labels=c("Low",  "Medium", "High"))

以上代码报错:

Error in factor(white_wine$quality, c(3, 4, 5.6, 7, 8, 9, 10), levels = 1:3, : invalid 'labels'; length 3 should be 1 or 2

如何改进代码?

【问题讨论】:

  • ifelse 不会帮你吗?

标签: r


【解决方案1】:

使用cut 离散化一个连续变量:

x <- c(3,4,5,6,7,8,9)
cut(x, c(-Inf, 4, 7, 9), labels = c("Low",  "Medium", "High"))
#[1] Low    Low    Medium Medium Medium High   High  
#Levels: Low Medium High

【讨论】:

    【解决方案2】:

    如果您有更多关卡,cut() 是您的最佳选择。但是,如果你只有七个级别,你也可以使用forcats 包中的fct_collapse()

    library(forcats)
    
    quality <- factor(3:9)
    
    fct_collapse(quality,
                 low = c("3", "4"),
                 medium = c("5", "6", "7"),
                 high = c("8", "9"))
    
    #[1] low    low    medium medium medium high   high  
    #Levels: low medium high  
    

    【讨论】:

    • @Sotos 没那么奇怪。就其本质而言,因子是离散值,而不是(连续)数字。
    • @KonradRudolph 我想作为一名数学家,我习惯将离散值/因子解释为纯数字。
    • @Sotos 不同之处在于数学是无类型。一切都是数字(或集合,或‹insert abstract here›)。编程语言是有类型的(即使在 R 的情况下,类型相当弱且不情愿),类型实际上相当重要。
    • @KonradRudolph 正是我的意思(我不熟悉 typed/untyped 这个术语)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多