【问题标题】:Assign lables to factors in R using .csv-file使用 .csv 文件为 R 中的因子分配标签
【发布时间】:2020-07-12 09:40:55
【问题描述】:

我正在使用 R 中的 .csv 文件,该文件有一列我想将其视为一个因素。它包含数字。

variable1
1 
2
4
4
1
3
and so on

我现在想为这个因子变量分配标签。我所做的工作:

v1$variable1 <- factor(v1$variable1,
                            levels = c(1,2,3, 4, 5, 6 (and so on)),
                            labels = c("school 1", "school 2", "school 3", "school 4", "school 5",
                                       "school 6" (and so on)) 

但是,学校列表是非常动态的,与其每次都更改代码,不如拥有另一个包含这样的级别和标签的 csv 文件会更加优雅:

level   lables
1       school1
2       school2
3       school3
and so on

然后将该 csv 文件读入 R 代码并根据第二个 cvs 文件分配标签。这可能吗?如果可以,怎么做?

非常感谢您的帮助!

【问题讨论】:

    标签: r csv factors levels


    【解决方案1】:

    如果您在v2中创建另一个csv,您可以使用matchvariable1level匹配并得到对应的lables

    v1$variable2 <- v2$lables[match(v1$variable1, v2$level)]
    v1$variable2 <- factor(v1$variable2)
    

    也许,merge 在这种情况下也可以工作

    v1 <- merge(v1, v2, by.x = 'variable1', by.y = 'level')
    

    【讨论】:

    • 合并的东西奏效了!非常非常感谢!!
    【解决方案2】:

    通常,如果您按照建议使用查找表...

    school_lut <- data.frame(
      value = c(1, 2, 3, 4, 5),
      label = c("Cambridge", "Bezt school", "R", "S", "Holly")
    )
    
    school_lut_ss <- school_lut[school_lut$value %in% df$var1, ]
    # Previous step only needed to eliminate levels you don't have in your data
    df$var1 <- factor(df$var1, school_lut_ss$value, school_lut_ss$label)
    
    table(df$var1)
    
    # Cambridge Bezt school           S       Holly 
    #         1           4           1           2 
    

    数据

    set.seed(12)
    df <- data.frame(
      var1 = sample(1:5, size = 8, replace = TRUE)
    )
    

    【讨论】:

    • 非常感谢!不,“school1”等只是一个占位符,这些实际上是真实的学校名称。
    • @Fabienne 已更新。您也可以使用droplevels() 在转换为因子后消除空级别。
    • 再次感谢您!我会研究一下,看看我是否理解它;),
    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多