You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用purrr替代for循环递归调用tidyr::separate_longer_delim处理数据框

用purrr::reduce替代循环实现多列递归拆分

首先给出原始数据框:

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)
)

需要处理的目标列:

strat <- c('turbType', 'turbSize')

原有的for循环实现方式:

for(i in seq(length(strat))) {
  dat <- tidyr::separate_longer_delim(dat, dplyr::all_of(strat[i]), delim = ";")
}

purrr::reduce解决方案

可以用purrr::reduce来迭代处理每一列,把数据框作为初始值,依次传入每个列名执行拆分操作,代码如下:

library(purrr)
library(tidyr)
library(dplyr)

result <- reduce(strat, 
                 ~ separate_longer_delim(.x, all_of(.y), delim = ";"), 
                 .init = dat)

代码解释

  • reduce的第一个参数是要迭代的列名向量strat
  • 第二个参数是匿名函数:.x代表每次迭代后的结果数据框,.y代表当前迭代的列名
  • .init指定初始输入数据框为dat
  • 每次迭代都会把上一步处理好的数据框,对当前列执行separate_longer_delim拆分,最终得到和for循环完全一致的结果

验证结果:

print(result)
#   plotType turbType turbSize estimate
# 1       RP        3      2.4      0.1
# 2       RP        8      2.4      0.1
# 3       FP        5      3.6      0.5
# 4       FP        5      4.2      0.5
# 5       FP        7      3.6      0.5
# 6       FP        7      4.2      0.5

内容的提问来源于stack exchange,提问作者user1658170

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:12:07