添加带有 0 和 1 的新列,具体取决于带有 mutate 的 x 列中的数值

Add new column with 0 and 1 depending on a numeric value in column x with mutate

我想添加一列来预测 glm 高成本。 我使用代码:

 df %>%
      mutate(high_costs = case_when(Totalcosts>=4000~"1",
                                     Totalcosts<4000~"0"
                                     ))

这显然给了我正确的价值观,但是 现在我有两个问题:

  1. 如何将此列实际添加到我的 df 中?

  2. 是否有可能(通过使用其他代码)使输出成为数字而不是因子,因为我将在我的 glm 中预测 0 或 1。还是我必须使用像

    这样的代码

    df$y <- as.numeric(as.factor(df$high_costs))

哦,是的。

  1. 您只需要将它重新分配给一个新变量(或者如果您希望使用完整的 rambo - 再次重新分配给 df,但我强烈建议不要这样做)。
df_1 = df %>%
      mutate(high_costs = case_when(Totalcosts>=4000~"1",
                                     Totalcosts<4000~"0"
                                     ))

您也可以使用 ifelse() 语法,但我也很喜欢 SQL 与大小写交叉使用。

  1. 是的。首先,最简单的方法。删除引号。
df_1 = df %>%
      mutate(high_costs = case_when(Totalcosts>=4000~1,
                                     Totalcosts<4000~0
                                     ))

R 会将这些识别为数值。

然而,第二种方法是使用菊花链连接。这是必要的,因为 R 在将字符或数字转换为因子时实际上在做什么(https://www.guru99.com/r-factor-categorical-continuous.html#:~:text=Factor%20in%20R%20is%20a,integer%20data%20values%20as%20levels。-请注意突出显示部分中的第二句)

因此,您可以分多个步骤进行:

df %>%
      mutate(high_costs = case_when(Totalcosts>=4000~"1",
                                     Totalcosts<4000~"0"
                                     ),
             high_costs = as.character(high_costs),
             high_costs = as.numeric(high_costs)) 
    

或者,将其全部包装一次,这样看起来更难,但需要的代码更少。

df_1 = df %>%
      mutate(high_costs = as.numeric(as.character(case_when(Totalcosts>=4000~1,
                                     Totalcosts<4000~0
                                     ))))

'df$y <- as.numeric(as.factor(df$high_costs))' 不会按照你希望的方式工作,除非你提供一个更好的理由来说明为什么你想要一个数字因子值,R 已经做了一些事情,因为它是一个因子.我强烈建议您调查 R 中字符和因素之间的差异,以进一步了解原因。