代码之家  ›  专栏  ›  技术社区  ›  Elias EstatisticsEU

在R中,如何设置和保留具有不同标签的factor中的自定义级别?

  •  1
  • Elias EstatisticsEU  · 技术社区  · 7 年前

    在R中,如何设置和保留具有不同标签的factor中的自定义级别?

    我知道一个解决方案是将这些权重设置为标签,但随后我将丢失因子的“标签”。

    例如:

    age_f <- factor( c(1, 10, 100), levels = c( 1, 10, 100 ), labels = c( "baby", "child", "old" ), ordered = T )
    
    levels(age_f)
       [1] "baby"  "child" "old"  
    labels(age_f)
       [1] "1" "2" "3"
     labels(levels(age_f))
        [1] "1" "2" "3"
     as.numeric(age_f)
        [1] 1 2 3
    
    Desired output: 
     as.numeric(age_f)
            [1] 1 10 100
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   lroha    7 年前

    你可以用 labelled 这个包裹。

    library(labelled)
    labelled(c(1, 10, 100), c(baby = 1, child = 10 , old = 100))
    
    <Labelled double>
    [1]   1  10 100
    
    Labels:
     value label
         1  baby
        10 child
       100   old
    

    to_factor .

        2
  •  0
  •   Elias EstatisticsEU    7 年前

    我找到了一个解决办法,以便使用我分配给它们的自定义值保留因子的级别:

    这相当于从一开始创建两个不同的数据集/数据帧,一个具有因子标签,另一个具有相应的级别。

    但是,如果您不想设置变量的“两倍”,这可能不太实际。

    如果有需要,可以通过创建两个不同的df来分离它们。

    # Example Factor: 
    age_f <- factor( ordered( 1:3 ), labels = c( "1 Infant", "10 Child", "100 Old" ) )
    
    # The Function
    Leveling_Labels <- function( factors, split_arg = " " ) { 
    
      leveling_Labels <- list()
    
      for( i in 1:length( factors ) )  { 
    
        splits                  <- strsplit( as.character( factors[[i]] ), split_arg )
        leveling_Labels[[i]]    <- as.numeric( unlist( lapply( 1:length( splits ), function(x) splits[[x]][1] ) ) )
        levels( factors[[i]] )  <- unlist( lapply( 1:length( splits ), function(x) splits[[x]][2] ) )
    
      }
    
      results <- c( factors, leveling_Labels )
      results
    
    }
    
    • 年龄

     [1] 1 Infant 10 Child 100 Old 
        Levels: 1 Infant < 10 Child < 100 Old
    

    调配标签(列表(年龄),“”)

    [[1]]
    [1] Infant Child  Old   
    Levels: Infant < Child < Old
    
    [[2]]
    [1]   1  10 100
    

    p、 你知道我在哪里可以像那样贡献自制的R函数吗?你知道哪些软件包是开放式的,可以进行协作的,或者是主动搜索天真级别的贡献者吗?