R语言实现间隔2行插入1行数据合并两个数据框(保留行序)
R数据框按固定间隔插入行实现方案
不需要依赖分组合并操作,直接按位置拼接即可100%保留df原有行顺序,以下提供两种可直接运行的实现:
基础R无依赖实现
先统一两个数据框的列名避免合并报错,再将df按每2行拆分为独立块,和df2的行逐块交替拼接即可:
# 对齐列名 colnames(df) <- "x" # 拆分df为每2行一个块 df_blocks <- split(df, f = rep(1:10, each = 2)) # 逐块拼接df片段与df2的对应行 df3 <- do.call( rbind, mapply( FUN = function(block, insert_row) rbind(block, insert_row), df_blocks, split(df2, 1:10), SIMPLIFY = FALSE ) ) # 清理冗余行名 rownames(df3) <- NULL
运行结果和你给出的目标df3结构完全一致,全程未对df做任何排序操作,原始行顺序不会发生任何变动。
tidyverse风格实现
如果日常使用tidyverse生态,可以用以下代码实现相同效果:
library(dplyr) library(purrr) df3 <- df |> as.data.frame() |> rename(x = V1) |> mutate(grp = rep(1:10, each = 2)) |> group_split(grp, .keep = FALSE) |> map2_dfr(.y = split(df2, 1:10), .f = bind_rows)
之前分组合并方案打乱顺序的核心原因:join/merge类操作默认会对匹配键做排序,无法保证原始行序,按固定位置拆分拼接的思路可以完全规避这个问题。
内容的提问来源于stack exchange,提问作者hugh_man
相关产品推荐
相关产品推荐

