【问题标题】:Using the factor function to assign labels使用因子函数分配标签
【发布时间】:2021-07-02 19:37:21
【问题描述】:

我是 R 新手。我希望就我的硬件问题得到一些指导。 我正在尝试将标签上下分配给变量。代码正在运行,但我不断将 NA 作为值。 这是我的代码:

NewVar <- if_else(data1$NewVar>median(data1$NewVar, na.rm = TRUE),"1","0")
factor(NewVar)
factor(NewVar, levels=c("up","down"))

输出:

  [1] 0    0    0    1    0    1    1    0    1    0    1    1    0    0    0    0    1    1    0    0    0    0    0    1    0    1    0    0    1   
 [30] 0    0    1    1    1    1    0    1    1    0    1    1    0    0    1    0    0    0    0    0    1    1    1    1    0    0    0    0    1   
 [59] 1    1    0    1    1    0    1    0    0    1    1    0    1    0    0    0    1    1    0    0    0    0    1    0    1    0    1    1    1   
 [88] 0    0    0    0    0    1    1    1    0    0    1    0    0    1    1    1    1    1    0    1    1    0    1    0    1    1    1    1    0   
[117] 0    1    0    1    1    1    0    0    1    0    1    0    1    1    0    1    1    1    1    1    1    NA 0    0    0   

Levels: 0 1

  [1] NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [30] NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [59] NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 [88] NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[117] NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
Levels: high low

知道如何解决这个问题吗?

【问题讨论】:

  • 注意这里的levels= 和@Ben 使用labels= 的区别。从?factor 开始,levels 是“'x' 可能采用的唯一值的可选向量...”,但在您的@ 向量中没有观察到"up""down" 987654328@/"0"。如果您将代码更改为使用labels=,它应该可以工作。

标签: r r-markdown markdown


【解决方案1】:

请花一点时间检查一下:How to make a great R reproducible example 发帖。它将帮助您提出更多关于R的问题。

您想要的是以下内容:

library(dplyr)
set.seed(4211)
old <- c(rnorm(100), NA)

NewVar <- if_else(old>median(old, na.rm = TRUE),"1","0")
factor(NewVar, labels=c("up","down"))
  [1] up   up   down down down up   down down down up   up   down down up   down up  
 [17] up   up   up   up   down down down down down up   up   down up   down up   down
 [33] up   down down down up   up   up   down up   up   up   down up   down up   down
 [49] down up   up   up   down down down down down up   down up   down down down up  
 [65] down up   up   up   down up   down down down down down down up   up   down up  
 [81] up   up   up   down up   up   up   up   up   up   down down up   down up   up  
 [97] up   down down down <NA>
Levels: up down

在这个例子中,old 只是一个向量,很像你的 data$NewVar 变量。您在代码中做错的是您两次调用factor()。此外,您要设置标签,而不是级别。此外,您可能还希望包含 levels 参数,以指定 1、0 中的哪个对应于哪个标签。为此,只需将levels=c("0","1")levels=c("1", "0") 添加到您的函数调用中,具体取决于“0”代表向上还是向下。它可能代表向下,所以levels=c("1", "0") 将是要走的路。

【讨论】:

  • 在同样的例子中,为了制作一个伟大的 R 可重现的例子,它建议使用set.seed 在随机过程的情况下 :-)
  • 我明白了。是的,我改变了水平,它奏效了。谢谢
  • JudeKoj,不急,但通常在答案解决您的问题时,您 accept it。除了给回答者一些分数外,它还为有类似问题的后续读者提供了结束和您首选解决方案的指示。同样,不要着急,但请记住回来接受这个答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
相关资源
最近更新 更多