在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
相关产品推荐
相关产品推荐

