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

R中使用dplyr保留数据框首尾两行并筛选中间行的实现方法

完全可以通过dplyr的行索引和条件过滤组合实现,不需要手动拆分数据再rbind,以下是两种实现方案:

方案1:单filter实现(代码最简)

利用row_number()获取当前行的索引位置,n()获取数据框总行数,直接在过滤条件中区分不同区域的保留规则:

library(dplyr)

result <- test %>%
  filter(
    # 保留前2行、倒数第2行、最后1行
    row_number() %in% c(1, 2, n()-1, n()) |
    # 中间区域(第3行到倒数第3行)仅保留originDestinType不等于1的行
    (row_number() >=3 & row_number() <= n()-2 & originDestinType != 1)
  )

运行后得到的result即为6行的目标数据框,行顺序和原数据完全一致。

方案2:分步实现(逻辑更清晰)

如果需要对中间区域单独做额外处理,可以拆分步骤,最后再绑定数据:

library(dplyr)

# 提取中间区域符合条件的行
mid_part <- test %>%
  slice(3:(n()-2)) %>%
  filter(originDestinType != 1)

# 提取首尾固定保留的行,和中间部分合并后按原顺序排序
result <- test %>%
  slice(1,2,n()-1,n()) %>%
  bind_rows(mid_part) %>%
  arrange(row_number())

两种方案都兼容行数变化的场景,不需要手动修改中间行的索引数值,比手动rbind更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:45:01