У меня есть данные во фрейме данных в виде:
structure(list(O2Range = c("112 MAX", "16/19", "16/190", "12 MAX",
NA, NA, NA, NA, NA, NA, NA, "16/20", "18/22", NA, "16/20", NA,
"11/13", NA, "16/190", NA)), row.names = c(NA, -20L), class = c("tbl_df",
"tbl", "data.frame"))
Как может быть очевидно, низкие и высокие значения O2 разделяются знаком '/' в столбце, но иногда они перечисленыкак число, а затем «MAX» (то есть: 112 MAX).
Я пытаюсь разделить этот столбец на два новых столбца следующим образом:
library(tidyverse)
data$O2High <- if (str_detect(data$O2Range, "/")) {str_split_fixed(data$O2Range, fixed("/"), 2)[, 2]
} else {str_split_fixed(data$O2Range, fixed(" "), 2)[, 2]}
data$O2Low <- if (str_detect(data$O2Range, "/")) {str_split_fixed(data$O2Range, fixed("/"), 2)[, 1]
} else {str_split_fixed(data$O2Range, fixed(" "), 2)[, 1]}
Однако результат не получается ожидаемым:
structure(list(O2High = c("MAX", "", "", "MAX", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", ""), O2Low = c("112",
"16/19", "16/190", "12", "", "", "", "", "", "", "", "16/20",
"18/22", "", "16/20", "", "11/13", "", "16/190", "")), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
Тамкажется, что-то происходит с моим утверждением if / else, но я не могу решить проблему.Есть идеи?
Ожидаемый результат:
Expected output:
structure(list(O2High = list("112", "19", "190", "12", NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_, "20", "22", NA_character_,
"20", NA_character_, "13", NA_character_, "190", NA_character_),
O2Low = list("MAX", "16", "16", "MAX", NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_, "16", "18", NA_character_,
"16", NA_character_, "11", NA_character_, "16", NA_character_)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
Спасибо, Крис