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

R语言如何将数据框中的整数列拆分为单个独立数字列

R语言拆分整数列为逐位多列的实现

转换目标:保留原数据框的Group、Number列字段,将整数类型的Number按组成的单个数字拆分为独立列,数字位数不足的位置自动填充NA,最终结构与示例完全匹配。

第一步:构造可复现的示例原始数据

df <- data.frame(
  Group = c("A", "B", "C"),
  Number = c(456, 3, 18)
)

方法1:基础R原生实现(无第三方包依赖)

核心逻辑为先将整数转为字符串逐位拆分,再根据最长数字的位数自动补齐列长度,最终合并回原数据框:

# 逐字符拆分数字列
split_digits <- strsplit(as.character(df$Number), split = "")
# 计算最长数字的位数,确定需要生成的拆分列数
max_digit_len <- max(nchar(df$Number))
# 对长度不足的数字右侧补NA,生成规整的拆分矩阵
digit_matrix <- do.call(
  rbind,
  lapply(split_digits, \(x) c(x, rep(NA, max_digit_len - length(x))))
)
# 转换为数据框,设置规范列名并将字符值转成数值类型
digit_cols <- as.data.frame(digit_matrix)
colnames(digit_cols) <- paste0("Digit", 1:max_digit_len)
digit_cols <- as.data.frame(lapply(digit_cols, as.numeric))
# 合并回原数据框得到最终结果
result_base <- cbind(df, digit_cols)

方法2:tidyverse生态实现(代码简洁易维护)

借助tidyr::separate的字符串拆分能力,核心逻辑即可完成转换:

library(tidyverse)

result_tidy <- df %>%
  # 自动根据数字最长位数定义拆分目标列名
  mutate(num_str = as.character(Number)) %>%
  separate(
    col = num_str,
    into = paste0("Digit", 1:max(nchar(num_str))),
    sep = "",
    fill = "right" # 短数字右侧自动填充NA
  ) %>%
  # 将拆分得到的字符列转换为数值类型
  mutate(across(starts_with("Digit"), as.numeric))

实现注意事项

  • 整数转字符串拆分时不会出现前导零,符合整数类型的语义(例如整数18拆分后得到1、8,不会出现多余的前置0)
  • 自动适配列数的逻辑会跟随输入数据的最长数字位数动态调整,无需手动修改列名数量
  • 拆分得到的列默认为字符类型,需显式转换为数值类型才能保留整数的计算属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 15:06:04