R语言处理杂乱数据:提取变量中作为表头的取值生成新列
核心思路
通用方案不需要依赖表头的命名规则,你只需要先自定义表头行的判定逻辑,再基于表头位置对数据做分组填充即可,判定逻辑可以根据你的实际业务场景灵活调整。
实现方案1:tidyverse 版本(代码可读性高)
library(dplyr) df_result <- df |> # 第一步:自定义表头判定规则,可根据实际需求修改 # 示例规则:a列取值不等于"value"即为表头,也可替换为其他规则,比如行号、其他列的特征等 mutate(is_header = a != "value", # 第二步:遇到新的表头就生成新的分组ID group_id = cumsum(is_header)) |> # 第三步:按分组取第一个值作为组对应的表头,填充到新列c group_by(group_id) |> mutate(c = first(a)) |> ungroup() |> # 清理过程中生成的中间列 select(-is_header, -group_id)
如果你的场景是预先知道所有表头的取值,只需要把判定规则改成以下形式即可,不需要表头有固定前缀:
# 把你已知的所有表头取值放到向量里 header_list <- c("fererfw", "ewetwet", "其他表头值") mutate(is_header = a %in% header_list)
实现方案2:基础R版本(无需加载额外包)
# 自定义表头判定规则,可根据实际需求修改 is_header <- df$a != "value" # 生成分组ID df$group_id <- cumsum(is_header) # 按分组填充表头到新列c df$c <- ave(df$a, df$group_id, FUN = function(x) x[1]) # 移除中间分组列 df$group_id <- NULL
内容的提问来源于stack exchange,提问作者persephone
相关产品推荐
相关产品推荐

