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

在R中如何拆分因子列提取信息生成补零年月与标识字段

实现方案

首先注意:你的id列是factor类型,处理前需要先转为字符型,否则字符串操作会直接读取因子的整数编码导致报错/结果异常。

方法1:tidyverse 简洁实现(推荐)

代码如下:

library(tidyverse)

# 示例数据(你的实际数据替换这部分即可)
df <- data.frame(
  id = factor(c("2000.1.ABC0123", "2010.11.BCD3652"))
)

# 拆分处理
df_result <- df %>%
  # 先转factor为字符型,再按`.`拆分为3列
  mutate(id = as.character(id)) %>%
  separate(id, into = c("year", "month", "Identifier"), sep = "\\.") %>%
  # 月份补0,拼接为6位yearmonth
  mutate(
    month = str_pad(month, width = 2, side = "left", pad = "0"),
    yearmonth = paste0(year, month)
  ) %>%
  # 保留需要的列
  select(Identifier, yearmonth)

运行后输出结果:

Identifier yearmonth
1   ABC0123    200001
2   BCD3652    201011

注:你给出的示例输出中第一个Identifier为AB0123,若你确实需要去掉标识符的首字符,可在上述mutate中添加Identifier = substr(Identifier, 2, nchar(Identifier))即可。

方法2:base R 实现(无需加载第三方包)

代码如下:

# 示例数据
df <- data.frame(
  id = factor(c("2000.1.ABC0123", "2010.11.BCD3652"))
)

# 拆分处理
id_char <- as.character(df$id)
split_list <- strsplit(id_char, "\\.")
df$Identifier <- sapply(split_list, function(x) x[3])
df$yearmonth <- sapply(split_list, function(x) {
  paste0(x[1], sprintf("%02d", as.integer(x[2])))
})
df_result <- df[, c("Identifier", "yearmonth")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:03