如何在R中读取data frame中Type B所在行之前的所有行
解决方案
分两种场景处理:
场景1:还未从源文件读取数据,直接读入时就筛选Type B前的内容
以csv文件为例,先定位Type B的行号再读取对应范围:
# 第一步:读取所有行定位Type B的首次出现位置 all_lines <- readLines("你的文件路径.csv") type_b_pos <- which(grepl("Type B", all_lines, fixed = TRUE))[1] # 第二步:读取Type B之前的所有行,skip参数可根据你是否要保留Type A行调整 df_type_a <- read.csv( text = all_lines[1:(type_b_pos - 1)], skip = 1 # 跳过Type A那行,直接用下一行当表头,不需要的话可以删掉这个参数 )
如果是Excel文件,可以用readxl包的read_excel配合n_max参数实现,逻辑完全一致。
场景2:已经把全量内容读入为data.frame,现在筛选对应范围
假设你已经读入的全量数据框叫df_full:
# 第一步:找到第一列值为Type B的首次出现行号 type_b_idx <- which(df_full[, 1] == "Type B")[1] # 第二步:提取Type B之前的所有行 df_type_a <- df_full[1:(type_b_idx - 1), ] # 可选操作:把第一行(Type A下方的第一行数据)设为表头,同时转换列类型 colnames(df_type_a) <- as.character(df_type_a[1, ]) df_type_a <- df_type_a[-1, ] df_type_a <- dplyr::mutate_all(df_type_a, as.numeric)
注意事项
- 如果匹配Type B时存在空格、大小写不一致的问题,可以用
trimws()处理列值,或者给grepl加ignore.case = TRUE参数 - 不需要删除Type A行的话,跳过对应删除步骤即可,也可以额外加一列
type = "A"给数据打分类标签
内容的提问来源于stack exchange,提问作者jennyro
相关产品推荐
相关产品推荐

