从R数据框中选取满足条件行的前后行(去重)
解决方案:获取条件行及其前后行的索引(高性能Base R实现)
针对你需要从大数据框中快速提取所有TRUE行及其前后一行索引(去重)的需求,这里提供一个纯Base R的高效实现方案:
# 示例数据框 df <- data.frame(x=c(TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE)) # 1. 定位所有值为TRUE的行索引 true_rows <- which(df$x) # 2. 生成包含目标行、前一行、后一行的索引集合,去重并排序 all_candidates <- unique(sort(c(true_rows, true_rows - 1, true_rows + 1))) # 3. 过滤掉超出数据框行范围的无效索引 final_indices <- all_candidates[all_candidates >= 1 & all_candidates <= nrow(df)] # 输出结果 final_indices
方案说明
- 性能优先:全程使用向量运算,没有循环操作,Base R的向量处理是底层优化过的,能高效应对超大数据框。
- 去重与排序:
unique()自动合并重复索引(比如示例中第7行既是第6行的后一行,也是第8行的前一行,只会保留一次),sort()保证结果按行号升序排列。 - 边界处理:最后一步过滤掉小于1或大于总行数的无效索引,避免出现不存在的行号。
运行上述代码后,会得到你期望的结果:[1] 1 2 4 5 6 7 8
内容的提问来源于stack exchange,提问作者Dylan Hettinger
相关产品推荐
相关产品推荐

