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

在R语言中删除各因子水平的最后2行数据

按因子分组删除每组最后2行并保留所有列

示例数据

先还原你的测试数据:

test <- data.frame(
  id = c(1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3),
  val = c(3,5,4,6,7,4,1,6,7,8,4,2,0,3,6,8,1,2),
  trt = c(1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2)
)

解决方案1:使用dplyr(tidyverse生态)

这是日常数据清洗中最直观的分组处理方式:

library(dplyr)

# 按id分组,保留每组前(n-2)行(即删除最后2行),最后取消分组避免后续操作受影响
result <- test %>%
  group_by(id) %>%
  slice_head(n = n() - 2) %>%
  ungroup()

# 查看结果
print(result)

解决方案2:Base R原生方法(无需额外包)

如果不想加载第三方包,用原生函数也能实现:

# 按id分组提取行索引,保留每组前(n-2)行的索引
keep_indices <- unlist(tapply(seq(nrow(test)), test$id, function(x) x[1:(length(x)-2)]))
result_base <- test[keep_indices, ]

# 查看结果
print(result_base)

两种方法都能得到你期望的输出,且会完整保留trt等所有列,不影响后续计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:30:00