【问题标题】:Convert Boolean Values to Numerical (0s & 1s)将布尔值转换为数值(0 和 1)
【发布时间】:2021-05-26 06:36:18
【问题描述】:

要在 R 中编写我的模型,我需要将组名值转换为数字 0 和 1。

这是数据框的示例:

+------------------------------------+
|   state      ID   time    amount   |
+------------------------------------+
|1  open        1     0      100     |
|2  open        1     3      92      |
|3  open        2     0      101     |
|4  open        2     4      84      |
|5  closed      3     1      98      |
|6  closed      3     5      72      |
|7  closed      4     0      101     |
|8  closed      4     4      76      |
+------------------------------------+

为了能够编写我的模型,我需要将状态列转换为只有 0 表示“打开”,而 1 表示“关闭”。它看起来像这样:

+------------------------------------+
|   state      ID   time    amount   |
+------------------------------------+
|1     0        1     0      100     |
|2     0        1     3      92      |
|3     0        2     0      101     |
|4     0        2     4      84      |
|5     1        3     1      98      |
|6     1        3     5      72      |
|7     1        4     0      101     |
|8     1        4     4      76      |
+------------------------------------+

Any suggestions on how this is done?

【问题讨论】:

    标签: r dummy-variable


    【解决方案1】:

    您可以在这里使用简单的ifelse 语句:

    df$state <- ifelse(df$state == "open", 0, 1)
    

    这假设在state 列中出现的仅有两个值是openclosed,这可能是一个很好的假设。

    【讨论】:

      【解决方案2】:

      另一种选择是

      df$state <- +(df$state != 'open')
      

      【讨论】:

      • 我以前从未见过+这样使用过,你能解释一下它在这里的实际作用吗?这比在as.numeric() 中包装该语句更好吗?
      • 感谢分享我不知道这是+ 标志的属性
      【解决方案3】:

      另一个使用match的基本R选项

      transform(
        df,
        state = match(state,c("open","closed"))-1
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 2022-07-28
        • 2016-02-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 2010-09-10
        相关资源
        最近更新 更多