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

如何将data.frame中唯一代码关联的多区域转换为宽格式数据?

嘿,这问题我熟!你想要的是把每个唯一代码对应的所有关联居住区域整理成一行,要么合并成一个字符串列,要么拆分成多个单独的区域列对吧?我用R的tidyverse工具包给你写两种实用的解决方案,直接就能跑~

解决方案

首先先还原你提供的示例数据:

# 构造示例数据
library(tibble)
df <- tibble(
  A = c(1483, 1483, 1483, 1483, 1423, 1423),
  B = c("De Rijp", "De Rijp", "De Rijp-Gracht", "De Rijp-Gracht", "Huiswaard", "Huiswaard")
)

方法1:将关联区域合并为单个字符串列

这种方式适合后续需要对区域列表做字符串处理的场景,我们先去除重复的A-B组合,再按代码分组合并区域:

library(dplyr)
library(stringr)

df_combined <- df %>%
  distinct(A, B) %>%  # 去掉重复的代码-区域组合
  group_by(A) %>%
  summarise(所有关联区域 = str_c(B, collapse = ", "), .groups = "drop")

# 查看结果
df_combined

输出会是这样:

# A tibble: 2 × 2
      A 所有关联区域                 
  <dbl> <chr>                       
1  1423 Huiswaard                   
2  1483 De Rijp, De Rijp-Gracht

方法2:将关联区域拆分为多个独立列

如果需要把每个区域单独放在一列里(比如区域1、区域2...),可以用pivot_wider来实现:

library(dplyr)
library(tidyr)

df_wide <- df %>%
  distinct(A, B) %>%
  group_by(A) %>%
  mutate(区域列名 = paste0("区域", row_number())) %>%  # 给每个区域生成列名
  pivot_wider(names_from = 区域列名, values_from = B) %>%
  ungroup()

# 查看结果
df_wide

输出会是这样:

# A tibble: 2 × 3
      A 区域1       区域2          
  <dbl> <chr>       <chr>          
1  1423 Huiswaard   NA             
2  1483 De Rijp     De Rijp-Gracht

注意事项

  • 第一步的distinct(A, B)是为了去除原始数据中重复的代码-区域组合,避免同一个区域被多次添加。如果你的原始数据里没有重复的A-B对,可以跳过这一步。
  • 如果某个代码对应更多区域,方法2会自动生成对应的区域3、区域4等列,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:58