R 测试因子的值
我有一个向量数据的因素,其水平是(0)否,(1)是和(8)剩余 这是该向量的第二个元素data[2]的值: (1) 对 我不明白的是数据[2]=“Yes”的值是假的。同样令人惊讶的是as.integer(数据[2])的值是2。不是应该是1吗?数据[2]=“Yes”的值不应该是真的吗R 测试因子的值,r,R,我有一个向量数据的因素,其水平是(0)否,(1)是和(8)剩余 这是该向量的第二个元素data[2]的值: (1) 对 我不明白的是数据[2]=“Yes”的值是假的。同样令人惊讶的是as.integer(数据[2])的值是2。不是应该是1吗?数据[2]=“Yes”的值不应该是真的吗 我刚开始使用R,所以我对它还不太了解,但我真的不明白这一点。有人能给我解释一下发生了什么事吗? < P>我不确定0, 1和8是从哪里来的,但是考虑一下这个可重复的例子: 加载数据 [1] 对 级别:无是残留 评估第二
我刚开始使用R,所以我对它还不太了解,但我真的不明白这一点。有人能给我解释一下发生了什么事吗? < P>我不确定0, 1和8是从哪里来的,但是考虑一下这个可重复的例子: 加载数据 [1] 对 级别:无是残留 评估第二个值 dt[2]=“是” [1] 真的 这将返回
2
,因为Yes
是第二个因子级别
[1] 二,
在幕后,因子不是由字符表示的,而是由其整数因子级别表示的。尽管打印(dt[2])的结果看起来像一个字符,
R
通过其因子级别对其进行评估。请提供一个(例如数据的dput()
)以便我们可以看到真正的结果。不确定您如何同时拥有数字0/1/8和否/是/剩余。R中的因子并不是这样工作的。每个级别从1开始获得一个顺序整数值。虽然这是一个R语言问题,但在使用可复制的示例重写并提供其他上下文后,您可能希望在交叉验证(甚至迁移到那里)时询问它。鉴于对一个答案的评论,这也是合理的,其中OP Philippe提到数据集的一个非常规方面(即向量中因子的非典型标记),可能导致异常行为。如果数据集的非常规方面可以与统计意义上的非标准方面联系起来,那么交叉发布或问题迁移似乎是合理的。我自己解决了这个问题,这只是一个糟糕的问题,因为我对因素感到困惑。dt[2]==“Yes”
也是正确的。您不应该需要作为.character()
。这不是必需的。当我键入数据[2]时,输出如下:[1](1)是级别:(0)否(1)是(8)剩余我知道为什么as.integer(数据[2])的值为2。但我仍然不明白为什么数据[2]=“是”的值不是真的。我认为,正如Flick先生所说,没有必要先使用as.character将其转换为字符串。事实上,当我对另一个数据集执行此操作时,它按预期工作。这是因为as.character(数据[2])的值为“(1)Yes”。
dt <- factor(c("No", "Yes", "Residue"), levels = c("No", "Yes", "Residue"))
dt[2]
as.integer(dt[2])