在R中如何移除特定type最大索引后的2行数据?
实现思路与代码
核心步骤
- 定位目标行号:找出
type为3和4的所有行索引,取其中最大值(即最后一次出现的位置) - 确定待删除行:每个目标
type最后一行的后2行,就是要剔除的范围 - 筛选保留数据:从原数据中排除这些待删除的行
具体代码实现
# 原始数据 data <- data.frame(grade = c(93,90,54,36,31,94,57,16,11,12,99,99,9,10,97,96), type = c(2,2,2,4,4,1,1,3,3,3,1,1,3,3,1,1)) # 1. 获取type=4和type=3最后一次出现的行号 last_type4 <- max(which(data$type == 4)) last_type3 <- max(which(data$type == 3)) # 2. 整理需要删除的行号集合 remove_rows <- c((last_type4 + 1):(last_type4 + 2), (last_type3 + 1):(last_type3 + 2)) # 3. 筛选得到目标数据 result <- data[-remove_rows, ] # 查看结果 print(result)
补充说明
which(data$type == x)能精准定位所有type等于x的行,取最大值即可拿到最后一次出现的位置- 用
:生成连续行号范围,合并后一次性剔除,操作简洁高效 - 如果担心出现行号超出数据总行数的情况(比如某类type最后一次出现在倒数第2行),可以用
pmin(last_typeX +2, nrow(data))来限制上限,避免报错
内容的提问来源于stack exchange,提问作者monckeyyL
相关产品推荐
相关产品推荐

