在r中使用mutate函数时出现错误信息

时间:2018-03-15 20:31:07

标签: r dplyr mutate

收到以下错误消息: mutate_impl(.data,dots)出错:   评估错误:参数" no"缺少,没有默认值。

 mutate(x,perfLev= ifelse(SS< 1438, "Below Basic",
                   ifelse(SS>= 1439 & SS <= 1499, "Basic",
                   ifelse(SS >= 1500 & SS <= 1545, "Proficient",
                   ifelse(SS >= 1546, "Advanced")))))

3 个答案:

答案 0 :(得分:2)

使用Make212和Renu的评论,这里有一个修复它的选项:

library(dplyr)
mutate(x,
       perfLev = case_when(
         SS <  1438              ~ "Below Basic",
         SS >= 1439 & SS <= 1499 ~ "Basic",
         SS >= 1500 & SS <= 1545 ~ "Proficient",
         SS >= 1546              ~ "Advanced",
         TRUE                    ~ "huh?"
       ) )

我添加了“默认”(TRUE),这通常很好(显式代码)。请注意,如果您不包含TRUE,那么它将获得NA值,以防您想要的值。如果以下任何一种情况属实,我可以在这里看到它发生:

  • is.na(SS)
  • SS >= 1438 & SS < 1439
  • SS > 1499 & SS < 1500
  • SS > 1545 & SS < 1546

如果NA可以接受且您保证 SS的完整性,则可能不需要它。

此代码相当于对代码的轻微修复:

mutate(x,
       perfLev = 
         ifelse(SS < 1438, "Below Basic",
                ifelse(SS >= 1439 & SS <= 1499, "Basic",
                       ifelse(SS >= 1500 & SS <= 1545, "Proficient",
                              ifelse(SS >= 1546, "Advanced", "huh?"))))
       )

仅限样式/清晰度缩进。

答案 1 :(得分:1)

case_when用于对多个if/else语句进行矢量化

require(dplyr)
mutate(x,perfLev= case_when(
                   SS < 1438 ~ "Below Basic",
                   SS >= 1439 & SS <= 1499 ~ "Basic",
                   SS >= 1500 & SS <= 1545 ~ "Proficient",
                   SS >= 1546 ~ "Advanced"))

答案 2 :(得分:1)

虽然OP提到了ifelse mutate中使用cut的问题,但我想提一下,在这种情况下library(dplyr) x %>% mutate(perfLev = cut(SS, breaks = c(0, 1438, 1499, 1545, +Inf), labels = c("Below Basic", "Basic", "Proficient", "Advanced"))) #OR x$perfLev <- cut(SS, breaks = c(0, 1438, 1499, 1545, +Inf), labels = c("Below Basic", "Basic", "Proficient", "Advanced")) 提供了更好的选择。

可以简单地写为:

breaks
  

通过编写可以简化将labels0 1438 -- "Below Basic" 1499 -- "Basic" 1545 -- "Proficient" +inf -- "Advanced" 匹配的逻辑   以表格格式向下并将其用作提示。上述案例的选项可以是:

react-native-ble-manager