【问题标题】:R Use Dplyr to create a column that contain 1 of 6 possible values based on the value of 5 other columnsR 使用 Dplyr 创建一个列,该列包含基于 5 个其他列的值的 6 个可能值中的 1 个
【发布时间】:2021-10-29 20:50:24
【问题描述】:

在 R 中,我正在尝试创建一个名为 model 的列,其中的值取决于最多 5 个其他列的值。

这些列是 Sport、Car、SUV、Wagon、Minivan、Pickup。如果它是该组的成员,则这 5 列的值为 1,否则为 0。我想创建一个名为 model 的列,如果 Sport = 1,2 如果 SUV = 1,则等于 1,如果 Wagon = 则等于 3 1, 4 如果 Minivan = 1 , 5 如果 Pickup = 1 否则如果所有 5 列都等于 0 则模型将 = 0。我使用 case 语句尝试它并使用 dplyr 进行变异

cars %>%
mutate(model == case_when(Sport == 1, ~ '1' 
                ,case_when(SUV == 1, ~ '2' 
                ,case_when(Wagon == 1, ~'3' 
                  ,case_when(Minivan == 1, ~'4' 
                  ,case_when(Pickup == 1, ~ '5'
                  ,TRUE ~ 0))))))

但我收到了这个错误:

>     error: Problem with `mutate()` input `..1`.
   i `..1 = ==...`.
  x Case 1 (`Pickup == 1`) must be a two-sided formula, not a logical vector.

我在下面提供了一个指向文件的链接。 【04cars.csv文件】

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您不嵌套case_when 语句,您只需将所有表达式传递给case_when 的一次调用

    cars %>%
      mutate(model = case_when(
        Sport == 1 ~ '1',
        SUV == 1 ~ '2',
        Wagon == 1 ~'3',
        Minivan == 1 ~'4',
        Pickup == 1 ~ '5',
        TRUE ~ 0))
    

    将使用每个值的第一个匹配条件。

    【讨论】:

    • 我添加了该代码,但出现以下错误
    • 你也有多余的逗号。我已更新答案以删除它们。
    • 所以我有以下代码:
    • 所以我有以下代码: cars %>% mutate(model = case_when( Sport == 1 ~ '1', SUV == 1 ~ '2', Wagon == 1 ~'3 ', Minivan == 1 ~'4', Pickup == 1 ~ '5', TRUE ~ 0)) 我得到错误'错误:mutate() 输入问题..1。我..1 = ==...。 x 对象“模型”未找到'
    • 我也尝试过它上面写的方式并得到错误:'错误:意外的数字常量:“Pickup == 1,〜”5“TRUE”'不确定我的错误在哪里是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2021-08-12
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多