表格的列中有单位。如何将列名称中的单位分离到另一列中?
示例:
主题 | 剂量(毫克) | 最高温度(小时) |
---|---|---|
2001 | 200 | 5 |
2002 | 200 | 5 |
这就是我想要的。
主题 | 剂量 | 剂量_单位 | 最高温度 | Tmax_unit |
---|---|---|---|---|
2001 | 200 | 毫克 | 200 | h |
2002 | 200 | 毫克 | 200 | h |
这是使用
pivot_longer/wider
和 separate_wider_regex
的方法:
dat <- data.frame(
SUBJID = c(2001L, 2002L),
`Dose (mg)` = c(200L, 200L),
`Tmax (h)` = c(5L, 5L),
check.names = FALSE
)
library(tidyr)
dat |>
pivot_longer(-SUBJID,
names_to = "name_unit"
) |>
separate_wider_regex(name_unit,
patterns = c(name = "^.*?", " \\(", unit = ".*", "\\)")
) |>
pivot_wider(
names_from = name,
values_from = c(unit, value),
names_glue = "{name}_{.value}",
names_vary = "slowest"
)
#> # A tibble: 2 × 5
#> SUBJID Dose_unit Dose_value Tmax_unit Tmax_value
#> <int> <chr> <int> <chr> <int>
#> 1 2001 mg 200 h 5
#> 2 2002 mg 200 h 5