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

如何使用dplyr拆分数据框并重新绑定列

使用dplyr高效拆分并列绑定数据框

首先纠正原代码的一个小问题:str_detect属于stringr包,不是string包,加载包时应该写library(stringr)。

下面是用dplyr实现需求的更高效写法,链式语法可读性更强,也更适配tidyverse生态:

基础实现版本

library(dplyr)
library(stringr)

new <- mtcars %>%
  # 筛选am为0的行,取前13行所有列
  filter(str_detect(as.character(am), "0")) %>%
  slice(1:13) %>%
  # 绑定am为1的行的第9-11列
  bind_cols(
    mtcars %>%
      filter(str_detect(as.character(am), "1")) %>%
      select(9:11)
  )

更高效的简化版

由于am是数值型变量,直接用数值判断比字符串检测更快,可简化为:

library(dplyr)

new <- mtcars %>%
  filter(am == 0) %>%
  slice(1:13) %>%
  bind_cols(
    mtcars %>%
      filter(am == 1) %>%
      select(9:11)
  )

封装成可复用函数

如果需要多次复用这个逻辑,可以封装成函数,参数化控制筛选条件、行范围和列范围:

library(dplyr)

split_and_bind <- function(df, filter_col, val1, val2, rows_range, cols_range) {
  part1 <- df %>%
    filter({{filter_col}} == val1) %>%
    slice(rows_range)
  
  part2 <- df %>%
    filter({{filter_col}} == val2) %>%
    select(cols_range)
  
  bind_cols(part1, part2)
}

# 调用示例
new <- split_and_bind(mtcars, am, 0, 1, 1:13, 9:11)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:01:25