如何优雅筛选数据框指定行:第2行及9、14等间隔5行
提取数据框特定行的优雅方案
问题描述
需要从数据框中提取两类行:
- 第2行(后续将用作列名)
- 第9、14、19、24……这类间隔5行的行
当前使用以下代码时,虽然能提取出9、14等行,但会遗漏第2行,还错误提取了不需要的第4行:
Parsed_Data_Frame <- Source_Data_Frame %>% filter(row_number() %%5 == 4)
数据集背景:数据源是读取为数据框的文本文件,前6行为可变的表头内容,分割线后是实际数据,总数据量约1000行,示例数据集如下:
Header1 Header2 Header3 Header4 Header5 Header6 ----------------------------------- 41628 60060 41028 41465 ----------------------------------- 41629 60145 41003 41471 ----------------------------------- 41700 60083 41076 41534 ----------------------------------- 41699 60264 41076 41533
解决方案
方法1:使用dplyr的filter精准匹配
直接通过逻辑条件同时指定第2行和目标间隔行,避免错误包含第4行:
library(dplyr) Parsed_Data_Frame <- Source_Data_Frame %>% filter(row_number() == 2 | (row_number() >= 9 & row_number() %% 5 == 4))
逻辑说明:
row_number() == 2精准保留第2行row_number() >= 9 & row_number() %%5 ==4仅保留行号≥9且满足每5行间隔的目标行,自动排除了第4行这类不符合的行
方法2:预先生成目标行号(更直观)
如果后续需要调整行号规则,这种方法更易维护:
# 生成目标行号向量:第2行 + 从9开始、步长为5的序列(直到数据框最后一行) target_rows <- c(2, seq(from = 9, to = nrow(Source_Data_Frame), by = 5)) # 直接按行号提取 Parsed_Data_Frame <- Source_Data_Frame[target_rows, ]
内容的提问来源于stack exchange,提问作者Darth Ratus
相关产品推荐
相关产品推荐

