【发布时间】:2019-09-25 18:41:03
【问题描述】:
我在数据框中有以下形式的数据:
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"))
显然,低氧读数和高氧读数在列中用“/”隔开,但有时会以数字形式列出,然后是“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"))
谢谢, 克里斯
【问题讨论】:
-
你能显示预期的输出吗
标签: r if-statement tidyverse stringr