【问题标题】:Categorical to Numeric Variable in RR中的分类到数值变量
【发布时间】:2019-07-25 07:01:34
【问题描述】:

使用 10 个不带小数的随机数创建因子向量 v1。 将因子向量转换为数值向量 v2。 按元素比较 v1 和 v2。将比较值(真或假)存储在向量中,并显示出来。

我试过这个:

v1<- factor(round(runif(10)),0)
v1
v2<-as.numeric(v1)
v2
comp<-v1==v2
comp

【问题讨论】:

  • 嗨。看来您实际上并没有在您的问题中提出任何问题。
  • 我无法回答这个问题。
  • 我很确定您打算在代码的第一行中使用 0 作为 round() 的第二个参数,因此您的括号放错了位置。应该是factor(round(runif(10), 0))
  • 顺便欢迎来到 SO! Dason 的意思是,如果您清楚地描述您的问题,并且您正在寻找什么答案是显而易见的,那么我们更容易为您提供帮助。很高兴您提供了您已经尝试过的代码,谢谢!
  • 要将因子值转换为数值向量,您不能只使用 'as.numeric' ,而是使用 v2&lt;- as.numeric(as.character(v1))v2&lt;- as.numeric(levels(v1))[v1]。而创造出来的值也只是0-1之间,我想你已经意识到了这一点。

标签: r


【解决方案1】:

看看下面的代码。

当 v1 是一个因子时,as.numeric(v1) 返回有关 v1 的每个元素的级别的信息。在此示例中,第一个元素是 5,这是因子的第三级,因此 .numeric 返回 3。

v1 的第二个元素是 2,它也是第二个级别,因此 as.numeric 返回 2,我们在比较 v1 == v2 时得到 TRUE。另请查看帮助?factor

使用as.numeric(as.character(v1) 进行预期的转换。

set.seed(2002)

v1 <- factor(round(10*runif(10),0))
v1
# [1] 5  2  9  0  9  8  8  10 10 9 
# Levels: 0 2 5 8 9 10

str(v1)
#Factor w/ 6 levels "0","2","5","8",..: 3 2 5 1 5 4 4 6 6 5

v2 <- as.numeric(v1)
v2
# [1] 3 2 5 1 5 4 4 6 6 5

v1 == v2
#[1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE


v2 <- as.numeric(as.character(v1))
v1 == v2
#[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多