代码之家  ›  专栏  ›  技术社区  ›  buhtz

为R中不存在的值设置级别

r
  •  1
  • buhtz  · 技术社区  · 8 年前

    首先:我不确定这是否适合我的场景。

    有一个问题,在原始数据中有4个可能的复选标记(“a”、“B”、“C”、“D”) 0 3 ..假设他们是年龄组(30岁以下,31岁至50岁,…)。不,我想要 价值标签 (如SPSS提供的)稍后在汇总表或绘图中使用它们。据我所知 R 提供 级别 为了这个。

    问题所在 现在是现在 "A" (编码为 0 )数据中当前不存在。但这在未来可能会发生变化,因为数据尚未固定。

    如何设置 数量 (SPSS含义:值标签)表示值( 0 在本例中)数据中当前不存在的?

    > set.seed(100)
    > s <- sample(c(seq(1,3), NA), 10, replace=TRUE)
    > f <- factor(s)
    > f
     [1] 2    2    3    1    2    2    <NA> 2    3    1   
    Levels: 1 2 3
    > levels(f) <- c("A", # = 0
    +                "B", # = 1
    +                "C", # = 2
    +                "D") # = 3
    > f
     [1] B    B    C    A    B    B    <NA> B    C    A   
    Levels: A B C D
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   IRTFM    8 年前

    你有两个困难。因子值的编号从1开始,就像R中几乎所有的索引一样,不接受分配到不存在的级别,因此您可以在因子创建时构建“D”级别,然后分配到NA值可以成功:

     set.seed(100)
     s <- sample(c(seq(1,3), NA), 10, replace=TRUE)
     (f <- factor(s, levels=1:4,labels=LETTERS[1:4]))
    # [1] B    B    C    A    B    B    <NA> B    C    A   
    #Levels: A B C D
     f[ is.na(f) ] <- "D"
     f
     #[1] B B C A B B D B C A
    #Levels: A B C D
    

    我发现使用字符向量要容易得多,建议对所有 read.* 操作。