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

如何在R中从一列提取字符并补充至已存在的列?

从id列提取信息修正Country和year列的缺失/错误值

针对id列存在带下划线(如AUS_1999)和不带下划线(如BELS1999)两种格式,导致拆分后部分行year为NA、Country取值错误的问题,可通过正则表达式从id中精准提取年份和国家信息,直接覆盖原有列的值。

R 实现(tidyverse)

使用stringr包的正则匹配功能,提取4位数字作为年份,剩余部分作为国家代码:

library(tidyverse)

# 构造示例数据框
df <- tibble(
  id = c("AUS_1999", "CAN_1999", "AUS_2000", "CAN_2000", "BELS1999"),
  Country = c("AUS", "CAN", "AUS", "CAN", "BELS1999"),
  year = c(1999, 1999, 2000, 2000, NA)
)

# 修正Country和year列
df <- df %>%
  mutate(
    # 提取id中的4位数字转为整数型年份
    year = as.integer(str_extract(id, "\\d{4}")),
    # 移除id中的下划线(若存在)和4位数字,得到国家代码
    Country = str_remove(id, "_?\\d{4}")
  )

运行后修正结果:

idCountryyear
AUS_1999AUS1999
CAN_1999CAN1999
AUS_2000AUS2000
CAN_2000CAN2000
BELS1999BELS1999

Python 实现(pandas)

借助pandas的字符串方法和正则表达式,完成信息提取与列修正:

import pandas as pd

# 构造示例数据框
data = {
    "id": ["AUS_1999", "CAN_1999", "AUS_2000", "CAN_2000", "BELS1999"],
    "Country": ["AUS", "CAN", "AUS", "CAN", "BELS1999"],
    "year": [1999, 1999, 2000, 2000, None]
}
df = pd.DataFrame(data)

# 提取年份并转为整数,提取国家代码
df["year"] = df["id"].str.extract(r"(\d{4})", expand=False).astype(int)
df["Country"] = df["id"].str.replace(r"_?\d{4}", "", regex=True)

运行后得到的结果与R方案一致,可直接修正所有格式异常的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:05:33