我正在尝试创建三个新列,它们是诊断的适当的人类可读摘要。例如,如果 diag_1 <400,则返回“neoplasm”。当我尝试运行代码时,出现错误:mutate()
输入 diagnosis1
有问题。 x 参数“no”缺失,没有默认值 ℹ 输入 diagnosis1
是 ifelse(...)
。
这是我的代码:
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
答案 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
。但是,明确地写东西会让我们在以后阅读相同的代码时更容易理解
或者可以使用 cut
或 findInterval
diabiates %>%
mutate(diagnosis1 = cut(diag_1, breaks = c(-Inf, 20, 130, 140),
labels = c("neoplasm", "digestive", "infection")))