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

在R语言中调换逗号分隔的子字符串位置

解决国家名称格式调换的问题

嘿,这个需求我之前处理过,用Pandas就能轻松搞定!针对那种"[国名简称], [完整前缀]"格式的名称,我们可以用两种思路来调换逗号两侧的内容:

方法一:拆分拼接法(直观易懂)

这种方法适合刚接触Pandas的朋友,步骤清晰,容易理解:

首先先准备示例数据(你可以替换成自己的DataFrame):

import pandas as pd

# 模拟你的数据框
df = pd.DataFrame({
    "Country": [
        "China, People's Republic of",
        "Congo, Democratic Republic of the",
        "Macedonia, Republic of",
        "Germany",  # 非目标格式的国家名,测试兼容性
        "Japan"
    ]
})

然后执行拆分和拼接操作:

# 按", "拆分,生成两列临时列
df[["Short_Name", "Prefix"]] = df["Country"].str.split(", ", expand=True)

# 对有Prefix的行调换位置,无Prefix的保留原名
df["Cleaned_Country"] = df.apply(
    lambda row: f"{row['Prefix']} {row['Short_Name']}" if pd.notna(row['Prefix']) else row['Country'],
    axis=1
)

# 删掉临时列(可选)
df = df.drop(["Short_Name", "Prefix"], axis=1)

执行后,Cleaned_Country列就会得到你想要的格式:比如"Democratic Republic of the Congo"、"People's Republic of China",而像Germany、Japan这类正常格式的名称也会原样保留。

方法二:正则替换法(简洁高效)

如果你的数据量比较大,或者想写更简洁的代码,用正则表达式替换是更好的选择,一行代码就能搞定:

df["Cleaned_Country"] = df["Country"].str.replace(r"^([^,]+), (.*)$", r"\2 \1", regex=True)

正则表达式解释:

  • ^([^,]+):匹配字符串开头到逗号前的所有内容(也就是逗号左边的部分),用括号分组标记为\1
  • , :匹配逗号加空格的分隔符
  • (.*)$:匹配逗号后面到字符串结尾的所有内容,分组标记为\2
  • 替换为r"\2 \1":就是把两个分组的内容调换位置,中间加空格

这种方法不需要生成临时列,处理速度更快,而且同样能兼容非目标格式的国家名(不会对它们做任何修改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:13