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

如何在DataFrame的Pass分组末尾插入指定DataFrame

问题:在DataFrame的Pass分组末尾插入指定数据行

现有如下结构的R语言DataFrame df:

mut   pi   pos  Pass
A     1   1010  010
G     1   1010  010
T     1   2020  020
T     1   2020  020
C     1   2020  020
A     1   5010  030
G     1   5010  040
G     1   5010  040
G     1   5010  040
C     1   5010  040

需求:创建一个新的DataFrame,并将其插入到df中Pass列每个唯一分组的最后一行之后。用于插入的DataFrame创建代码如下:

vec <- c("N",0,3333,"SEP")
df_insert<-as.data.frame(t(replicate(2, vec)))

期望得到的输出结果:

mut   pi   pos  Pass
A     1   1010  010
G     1   1010  010
N     0   3333  SEP
N     0   3333  SEP
T     1   2020  020
T     1   2020  020
C     1   2020  020
N     0   3333  SEP
N     0   3333  SEP
A     1   5010  030
N     0   3333  SEP
N     0   3333  SEP
G     1   5010  040
G     1   5010  040
G     1   5010  040
C     1   5010  040
N     0   3333  SEP
N     0   3333  SEP

解决方案

方案1:使用dplyr包实现

可以借助dplyr的分组拆分与批量合并功能快速完成操作,步骤如下:

# 若未安装dplyr,先执行安装
# install.packages("dplyr")
library(dplyr)

# 定义原数据框
df <- data.frame(
  mut = c("A", "G", "T", "T", "C", "A", "G", "G", "G", "C"),
  pi = rep(1, 10),
  pos = c(1010, 1010, 2020, 2020, 2020, 5010, 5010, 5010, 5010, 5010),
  Pass = c("010", "010", "020", "020", "020", "030", "040", "040", "040", "040"),
  stringsAsFactors = FALSE
)

# 创建插入用的DataFrame并统一列名
vec <- c("N",0,3333,"SEP")
df_insert <- as.data.frame(t(replicate(2, vec)), stringsAsFactors = FALSE)
colnames(df_insert) <- colnames(df)

# 执行分组插入并合并结果
result_df <- df %>%
  group_split(Pass) %>%
  purrr::map_dfr(~ rbind(.x, df_insert))

# 查看最终结果
print(result_df)

方案2:基础R实现

如果不想依赖第三方包,也可以用基础R的循环逻辑完成:

# 定义原数据框
df <- data.frame(
  mut = c("A", "G", "T", "T", "C", "A", "G", "G", "G", "C"),
  pi = rep(1, 10),
  pos = c(1010, 1010, 2020, 2020, 2020, 5010, 5010, 5010, 5010, 5010),
  Pass = c("010", "010", "020", "020", "020", "030", "040", "040", "040", "040"),
  stringsAsFactors = FALSE
)

# 创建插入用的DataFrame并统一列名
vec <- c("N",0,3333,"SEP")
df_insert <- as.data.frame(t(replicate(2, vec)), stringsAsFactors = FALSE)
colnames(df_insert) <- colnames(df)

# 遍历每个Pass分组,合并数据
unique_pass <- unique(df$Pass)
result_list <- list()

for (p in unique_pass) {
  group_data <- df[df$Pass == p, ]
  combined_data <- rbind(group_data, df_insert)
  result_list[[p]] <- combined_data
}

# 合并所有分组结果
result_df <- do.call(rbind, result_list)
print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:24:51