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

如何处理含重复信息的建筑数据集长表转宽表问题

如何处理含重复信息的建筑数据集长表转宽表问题

嗨,这个场景太常见了!你遇到的问题核心是同一个建筑ID的同一种属性(比如Exterior)有多个描述值,直接用pivot_wider会生成列表格式的列,而不是你想要的合并后字符串。解决思路很简单:先把每个ID+属性类型对应的多个描述值合并成一个字符串,再转宽表就搞定了。

先看你原来的代码问题:直接跑pivot_wider的话,遇到重复的ID+TYPE组合,会把DESCR变成列表(比如ID3的Exterior列会是list("Aluminum", "Stucco")),这显然不是你想要的效果。

下面是修正后的完整代码,我会一步步解释:

# 你的原始数据
struct_data <- data.frame(ID = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4),
                         TYPE = c("Foundation", "Condition", "Exterior", "Foundation",
                                  "Foundation", "Condition", "Exterior",
                                  "Foundation", "Condition", "Exterior", "Exterior",
                                  "Foundation", "Condition", "Exterior"),
                         DESCR = c("Slab", "Fair", "Brick", "Crawl Space",
                                   "Crawl Space", "Good", "Stucco",
                                   "Crawl Space", "Bad", "Aluminum", "Stucco",
                                   "Slab", "Fair", "Brick"))

library(tidyverse)

# 第一步:分组合并重复属性的描述值
cleaned_data <- struct_data %>%
  group_by(ID, TYPE) %>%  # 按建筑ID和属性类型分组
  summarise(DESCR = str_c(DESCR, collapse = " & "), .groups = "drop")  # 把同组的描述用" & "拼接,然后取消分组

# 第二步:转宽表
wide_struct_data <- cleaned_data %>%
  pivot_wider(
    names_from = TYPE,
    values_from = DESCR
  )

代码解释:

  • 分组:group_by(ID, TYPE)确保我们把同一个建筑的同一种属性(比如ID3的Exterior)归到一组,这样后续可以处理组内的多个描述值。
  • 合并字符串:str_c(DESCR, collapse = " & ")把组内的所有DESCR值用" & "连接成一个字符串,比如ID3的Exterior就会变成Aluminum & Stucco;.groups = "drop"是为了避免分组残留影响后续操作。
  • 转宽表:这时候再用pivot_wider,每个ID对应的每个属性就只有一个合并后的字符串,不会再出现重复或列表格式的问题。

运行后你会得到这样的结果:

> wide_struct_data
# A tibble: 4 × 4
     ID Foundation       Condition Exterior       
  <dbl> <chr>            <chr>     <chr>          
1     1 Slab & Crawl Space Fair      Brick          
2     2 Crawl Space      Good      Stucco         
3     3 Crawl Space      Bad       Aluminum & Stucco
4     4 Slab             Fair      Brick          

额外小技巧:

如果你的数据里存在同一个ID+TYPE下的重复描述值(比如某建筑的Exterior有两个"Brick"),可以在合并前加一步去重:

cleaned_data <- struct_data %>%
  group_by(ID, TYPE) %>%
  distinct(DESCR, .keep_all = TRUE) %>%  # 去掉组内重复的描述值
  summarise(DESCR = str_c(DESCR, collapse = " & "), .groups = "drop")

这样就能保证每个描述值只会出现一次啦!

备注:内容来源于stack exchange,提问作者tchoup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:13:06