【发布时间】:2018-12-17 23:23:05
【问题描述】:
我有一个关于诊断信息的小标题:
data <- tibble(
id = c(1:10),
diagnosis_1 = c("F32", "F431", "R58", "S32", "F11", NA, NA, "Y67", "F32", "Z032"),
diagnosis_2 = c(NA, NA, NA, NA, NA, NA, "G35", NA, NA, NA),
diagnosis_3 = c("F40", NA, "R67", "F431", NA, "F60", "S58", "R68", "F11", NA),
diagnosis_4 = c(NA, NA, "F65", NA, "F19", NA, NA, "F32", NA, NA)
)
作为清理过程的一部分,我删除了所有不符合特定标准的诊断(即不以字母 F、G 或 Z 开头)。使用以下代码:
data$diagnosis_1[str_sub(data$diagnosis_1, 1,1) %in% c("R", "S", "Y")] <- NA
data$diagnosis_2[str_sub(data$diagnosis_2, 1,1) %in% c("R", "S", "Y")] <- NA
data$diagnosis_3[str_sub(data$diagnosis_3, 1,1) %in% c("R", "S", "Y")] <- NA
data$diagnosis_4[str_sub(data$diagnosis_4, 1,1) %in% c("R", "S", "Y")] <- NA
以这个 tibble 结尾:
我现在需要将数据向左移动以从左到右填充列(即如果 diagnostic_2、diagnostics_3 或 diagnostic_4 有数据,则 diagnostic_1 不为空)。我试过使用 ifelse(),因为它是矢量化的,但我似乎无法让它与几个嵌套的 ifelse() 一起使用。
ifelse(is.na(data$diagnosis_1), data$diagnosis_2, data$diagnosis_1))
非常感谢所有建议。
编辑:添加预期输出:
【问题讨论】: