使用 purrr 代替 for 循环并递归更新对象

问题描述 投票:0回答:1

给定如下数据框:

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 = ";")
   }

谢谢你。

r tidyverse purrr
1个回答
0
投票

我会这样做:

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
© www.soinside.com 2019 - 2024. All rights reserved.