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

R语言拆分数据框地址列:提取末尾两项生成城市与郡列

解决R语言中提取地址列最后两个元素的问题

嘿,你已经用strsplit拆分地址列开了个好头!接下来我们只需要从拆分后的列表里精准提取最后两个元素,分别存入City和County列就行。我会用两种方法帮你实现,其中tidyverse的方法更贴合你已经在使用的mutate工作流。

第一步:先构造示例数据(方便测试)

首先我们先还原你的样本数据框,这样可以直接运行代码验证:

library(dplyr)

# 构造你的样本数据
dataframe <- tibble(
  Address = c(
    "Glasgow;Scotland",
    "High Street;Edinburgh;Scotland",
    "Dundee;Scotland",
    "South Street;Dundee;Scotland"
  ),
  Type = c("House", "Apartment", "Apartment", "House"),
  Rent = c(1500, 1000, 800, 900)
)

方法一:Tidyverse风格(推荐)

用purrr::map_chr来处理拆分后的列表列,它可以轻松遍历每个列表元素并提取目标值:

library(purrr)

data <- dataframe %>%
  # 拆分地址列成列表
  mutate(split_add = strsplit(Address, ";")) %>%
  # 提取最后两个元素作为City和County
  mutate(
    # 取倒数第二个元素作为City,兼容地址拆分后有2段或3段的情况
    City = map_chr(split_add, ~ ifelse(length(.x) >= 2, .x[length(.x)-1], NA_character_)),
    # 取最后一个元素作为County
    County = map_chr(split_add, ~ .x[length(.x)])
  ) %>%
  # 移除临时的split_add列(可选)
  select(-split_add)

方法二:基础R风格

如果你不想加载额外的包,用sapply也能实现同样的效果:

# 先拆分地址列
data <- mutate(dataframe, split_add = strsplit(Address, ";"))

# 提取City和County
data$City <- sapply(data$split_add, function(x) {
  if (length(x) >= 2) x[length(x)-1] else NA_character_
})
data$County <- sapply(data$split_add, function(x) x[length(x)])

# 删除临时列
data$split_add <- NULL

最终结果

运行完代码后,你的数据框会变成这样:

print(data)
# # A tibble: 4 × 5
#   Address                          Type      Rent City      County  
#   <chr>                            <chr>    <dbl> <chr>     <chr>   
# 1 Glasgow;Scotland                 House     1500 Glasgow   Scotland
# 2 High Street;Edinburgh;Scotland   Apartment 1000 Edinburgh Scotland
# 3 Dundee;Scotland                  Apartment  800 Dundee    Scotland
# 4 South Street;Dundee;Scotland     House      900 Dundee    Scotland

我还加了对短地址的兼容判断(如果拆分后元素少于2个就返回NA),这样可以避免代码报错,让你的处理逻辑更健壮。

内容的提问来源于stack exchange,提问作者Will.S89

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:03:00