You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言处理含冗余字符数字列:补零及前缀添加需求

处理R数据集number列多格式数字的解决方案

核心思路

针对每行数字数量不固定的情况,放弃separate(需预设固定列数),改用dplyr+purrr+stringr组合,逐行完成清洗、拆分单个数字处理、合并回字符串的流程,完美保留原行结构。


第一步:模拟示例数据

先构造和描述匹配的测试数据集:

library(dplyr)
library(stringr)
library(purrr)

trial <- tibble(
  id = 1:3,
  grower_code = c("AB", "CD", "EF"), # 假设每行对应一个2位种植者代码
  number = c("123,  45,, 6789", " 98765, xyz12", "1, 234567")
)

1. 数字补零至6位(得到desiredTrial1)

先清洗无关字符,再拆分每个数字补零,最后合并回字符串:

desiredTrial1 <- trial %>%
  mutate(
    # 清洗流程:移除非数字/逗号字符→合并多余逗号/空格→清理首尾无效符号
    cleaned = str_replace_all(number, "[^0-9,]", "") %>%
      str_replace_all("[,\\s]+", ",") %>%
      str_trim() %>%
      str_remove_all("^,|,$"),
    # 逐行处理:拆分数字→补零至6位→合并为字符串
    formatted_number = map_chr(cleaned, ~{
      if(.x == "") return("")
      str_split(.x, ",")[[1]] %>%
        str_pad(width = 6, side = "left", pad = "0") %>%
        paste(collapse = ", ")
    })
  ) %>%
  select(id, formatted_number) # 保留原行结构

2. 拼接2位种植者代码(得到desiredTrial2)

在补零的基础上,用map2_chr同时传递种植者代码和清洗后的数字字符串,逐个完成拼接:

desiredTrial2 <- trial %>%
  mutate(
    cleaned = str_replace_all(number, "[^0-9,]", "") %>%
      str_replace_all("[,\\s]+", ",") %>%
      str_trim() %>%
      str_remove_all("^,|,$"),
    # 同步处理数字和种植者代码
    formatted_with_grower = map2_chr(cleaned, grower_code, ~{
      if(.x == "") return("")
      str_split(.x, ",")[[1]] %>%
        str_pad(width = 6, side = "left", pad = "0") %>%
        paste0(.y, .) %>% # 将种植者代码拼接至每个数字前
        paste(collapse = ", ")
    })
  ) %>%
  select(id, formatted_with_grower)

3. 可选:按数值排序

如果需要对每行内的数字按数值排序,只需在拆分后转数值排序再执行后续处理:

desiredTrial_sorted <- trial %>%
  mutate(
    cleaned = str_replace_all(number, "[^0-9,]", "") %>%
      str_replace_all("[,\\s]+", ",") %>%
      str_trim() %>%
      str_remove_all("^,|,$"),
    formatted_sorted = map2_chr(cleaned, grower_code, ~{
      if(.x == "") return("")
      # 转数值排序→补零→拼接种植者代码→合并
      nums <- str_split(.x, ",")[[1]] %>% as.numeric()
      sort(nums) %>%
        str_pad(width = 6, side = "left", pad = "0") %>%
        paste0(.y, .) %>%
        paste(collapse = ", ")
    })
  ) %>%
  select(id, formatted_sorted)

内容的提问来源于stack exchange,提问作者hacktacular42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:05:25