错误:缺少参数“no”,没有默认值

时间:2021-04-17 19:03:35

标签: r

我正在尝试创建三个新列,它们是诊断的适当的人类可读摘要。例如,如果 diag_1 <400,则返回“neoplasm”。当我尝试运行代码时,出现错误:mutate() 输入 diagnosis1 有问题。 x 参数“no”缺失,没有默认值 ℹ 输入 diagnosis1ifelse(...)

这是我的代码:

diabiates %>% 
    mutate(diagnosis1 = ifelse(diag_1 > 140, "infection", 
                               ifelse (diag_1 > 130, "digestive", 
                                       ifelse(diag_1 <20, "neoplasm"))))

                  
  encounter_id diag_1 diag_2 diag_3
1   182795622   428 410 491
2   185569164   428 403 682
3   68184246    428 401 413
4   217930950   415 401 272
5   94628052    648 659 250
6   116653320   414 411 493
7   75331956    730 707 731
8   100954620   428 414 250
9   137518212   427 427 427
10  284406012   715 276 414
11  101488188   403 250 250


1 个答案:

答案 0 :(得分:2)

我们需要最后一个 no 处的 ifelse 值。由于它是嵌套的 ifelse,因此第一个 ifelse 的“yes”值为“infection”,而 no 基于第二个 ifelse 的输出。类似地,对于第二个 ifelse,'no' 来自第三个 ifelse。但是,在最后一个或第三个 ifelse 中,没有“no”的输入。我们可以指定 NA_character_ 来填充

library(dplyr)
diabiates %>% 
    mutate(diagnosis1 = ifelse(diag_1 > 140, "infection", 
                           ifelse (diag_1 > 130, "digestive", 
                              ifelse(diag_1 <20, "neoplasm", 
                  NA_character_))))

此外,这可以用 ifelse 以更易读的方式完成,而不是嵌套的 case_when

diabiates %>%
    mutate(diagnosis1 = case_when(diag_1 > 140 ~ "infection",
                      diag_1 > 130 & diag_1 <= 140 ~ "digestive",
                      diag_1 < 20 ~ "neoplasm"))

由于是顺序处理,所以第二个条件也可以是diag_1 > 130。但是,明确地写东西会让我们在以后阅读相同的代码时更容易理解


或者可以使用 cutfindInterval

diabiates %>%
    mutate(diagnosis1 = cut(diag_1, breaks = c(-Inf, 20,  130, 140),
        labels = c("neoplasm", "digestive", "infection")))