收到以下错误消息: 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")))))
答案 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
通过编写可以简化将
labels
与0 1438 -- "Below Basic" 1499 -- "Basic" 1545 -- "Proficient" +inf -- "Advanced"
匹配的逻辑 以表格格式向下并将其用作提示。上述案例的选项可以是:react-native-ble-manager