【问题标题】:Set levels for not existing values in R为 R 中不存在的值设置级别
【发布时间】:2023-04-09 04:18:01
【问题描述】:

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

在从0 到3 的原始数据中编码有 4 个可能的复选标记(“A”、“B”、“C”、“D”)。假设他们是年龄组( 30 岁以下、31 岁至 50 岁……)。不,我想要像 value labels 之类的东西(比如 SPSS 提供),以便稍后在汇总表或绘图中使用它们。据我了解,R 为此提供了级别。

问题现在是数据中目前不存在"A"(编码为0)。但这在未来可能会改变,因为数据还没有固定。

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

> 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

【问题讨论】:

标签: r


【解决方案1】:

你有两个困难。因子值的编号从 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.* 操作采用使用 stringsAsFactors=FALSE 的策略。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2016-08-01
    • 2012-02-14
    相关资源
    最近更新 更多