【问题标题】:Create Dummy Variable if NA 1 else -1创建虚拟变量 if NA 1 else -1
【发布时间】:2019-12-08 17:50:00
【问题描述】:

我想创建一个虚拟对象,其中包含 NA 的所有单元格变为 1,所有其他单元格变为 -1。 我尝试了不同的事情,但都没有达到我想要的结果。

1) 这只会导致 NA 值。

Cox.Reg$FirstTask <- ifelse(Cox.Reg$active_task_avg_depth == NA, 1, -1)

2) 这导致新列中仅显示 -1 值。

Cox.Reg$FirstTask <- ifelse(Cox.Reg$active_task_avg_depth == "NA", 1, -1)  

【问题讨论】:

    标签: r dummy-variable


    【解决方案1】:

    如果它是一个真正的NA,那么我们可以使用is.na 来检测NA 元素,这将返回所有NATRUE 和其他FALSE 作为逻辑向量,这可用于ifelse 更改值

    ifelse(is.na(Cox.Reg$active_task_avg_depth), 1, -1)
    

    或者另一种选择是创建一个数字索引并相应地更改值

    c(-1, 1)[is.na(Cox.Reg$active_task_avg_depth) + 1]
    

    【讨论】:

    • 我还有一个问题,现在我想创建一个虚拟变量,如果单元格值为 1 到 7,那么虚拟变量应该是 1,否则为 -1。我试图像这样解决它,但它不起作用..提前谢谢你! Cox.Reg$FirstTask =1 && Cox.Reg$dayofmonth_created
    • @Amy INn 在这种情况下,您可以使用%in%&gt;=/&lt;=,但可以使用&amp; 而不是&amp;&amp;,即... ifelse(Cox.Reg$dayofmonth_created &gt;=1 &amp;Cox.Reg$dayofmonth_created &lt;=7, 1, -1)
    • 最后一个问题,如果我有需要基线的变量,我会怎么做。例如。例如,当我想知道一周中的哪一天时,它们可能是二进制的,但仍会显示它是在哪一天创建的
    • @Amy 在这种情况下,最好将其设置为符合逻辑的is.na(Cox.Reg$active_task_avg_depth),因为您可以使用which(is.na(Cox.Reg$active_task_avg_depth)) 换行以始终找到该位置
    • 另一种方式:2*is.na(Cox.Reg$active_task_avg_depth) - 1.
    猜你喜欢
    • 2019-05-19
    • 2018-01-27
    • 1970-01-01
    • 2023-03-13
    • 2023-03-27
    • 2018-04-06
    • 2020-01-31
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多