给定如下数据框:
dat <- data.frame(
plotType = c("RP", "FP"),
turbType = c("3;8", "5;7"),
turbSize = c(2.4, "3.6;4.2"),
estimate = c(0.1, 0.5)
)
我需要为以下位置的每一列递归调用 tidyr::separate_longer_delim:
strat <- c('turbType', 'turbSize')
这个 for 循环实现了我的目标,但我想知道是否有 purrr 解决方案?也许用reduce()?
for(i in seq(length(strat))) {
dat <- tidyr::separate_longer_delim(dat, dplyr::all_of(strat[i]), delim = ";")
}
谢谢你。
我会这样做:
library(tidyr)
library(dplyr)
dat |>
mutate(id = row_number()) |>
separate_longer_delim(cols = c(turbType, turbSize), delim = ";") |>
group_by(id) |>
complete(turbType, turbSize) |>
fill(plotType, estimate, .direction = "downup") |>
ungroup()
# # A tibble: 6 × 5
# id turbType turbSize plotType estimate
# <int> <chr> <chr> <chr> <dbl>
# 1 1 3 2.4 RP 0.1
# 2 1 8 2.4 RP 0.1
# 3 2 5 3.6 FP 0.5
# 4 2 5 4.2 FP 0.5
# 5 2 7 3.6 FP 0.5
# 6 2 7 4.2 FP 0.5