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

如何拆分以分号分隔的DataFrame嵌套数据?

规整非规整Tibble数据的Tidyverse方案

针对你的非规整Tibble数据,我们可以用tidyverse工具链将其转换为适合分析和可视化的整洁格式,同时兼容存在无需拆分列的场景。以下是两种实用方案:

方案1:合并为带分类的单一整洁数据框

此方案将食物和颜色数据整合到同一数据框中,通过category列区分类型,适合需要同时分析或对比两类数据的场景。

library(tidyverse)

# 转换为整洁格式
tidy_combined <- data %>%
  # 将需要拆分的列转为键值对格式
  pivot_longer(
    cols = c(`Favorite foods`, `Preferred colors`),  # 指定仅拆分这两列
    names_to = "category",
    values_to = "item"
  ) %>%
  # 按分号+空格拆分每个item为单独行
  separate_longer_delim(
    cols = item,
    delim = "; ",
    na.rm = FALSE  # 保留NA值(如Marge的颜色数据)
  )

转换后的数据结构示例:

# A tibble: 19 × 3
   `Full name` category          item          
   <chr>       <chr>             <chr>         
 1 Homer       Favorite foods    key lime pie  
 2 Homer       Favorite foods    celery        
 3 Homer       Favorite foods    fried rice    
 4 Homer       Preferred colors  green         
 5 Homer       Preferred colors  red           
 6 Marge       Favorite foods    celery        
 7 Marge       Favorite foods    ice cream     
 8 Marge       Preferred colors  NA            
 9 Mr. Burns   Favorite foods    fried rice    
10 Mr. Burns   Favorite foods    apple         
11 Mr. Burns   Favorite foods    fried chicken 
12 Mr. Burns   Favorite foods    ice cream     
13 Mr. Burns   Preferred colors  orange        
14 Mr. Burns   Preferred colors  purple        
15 Krusty      Favorite foods    celery        
16 Krusty      Favorite foods    key lime pie  
17 Krusty      Favorite foods    apple         
18 Krusty      Preferred colors  red           
19 Krusty      Preferred colors  blue          

方案2:拆分为独立的食物和颜色数据框

如果你需要分别分析食物和颜色数据,可将它们拆分为两个独立的整洁数据框:

# 生成食物数据框
tidy_foods <- data %>%
  select(`Full name`, `Favorite foods`) %>%
  separate_longer_delim(`Favorite foods`, delim = "; ", na.rm = FALSE) %>%
  rename(food = `Favorite foods`)  # 重命名列以提高可读性

# 生成颜色数据框
tidy_colors <- data %>%
  select(`Full name`, `Preferred colors`) %>%
  separate_longer_delim(`Preferred colors`, delim = "; ", na.rm = FALSE) %>%
  rename(color = `Preferred colors`)

食物数据框示例:

# A tibble: 12 × 2
   `Full name` food          
   <chr>       <chr>         
 1 Homer       key lime pie  
 2 Homer       celery        
 3 Homer       fried rice    
 4 Marge       celery        
 5 Marge       ice cream     
 6 Mr. Burns   fried rice    
 7 Mr. Burns   apple         
 8 Mr. Burns   fried chicken 
 9 Mr. Burns   ice cream     
10 Krusty      celery        
11 Krusty      key lime pie  
12 Krusty      apple         

颜色数据框示例:

# A tibble: 7 × 2
   `Full name` color 
   <chr>       <chr> 
 1 Homer       green 
 2 Homer       red   
 3 Marge       NA    
 4 Mr. Burns   orange
 5 Mr. Burns   purple
 6 Krusty      red   
 7 Krusty      blue  

兼容无需拆分列的场景

如果你的数据中存在无需拆分的列(如年龄、职业等单一值列),只需调整代码保留这些列即可:

  • 在方案1中,pivot_longer仅指定需要拆分的列,其他列会自动保留在每一行中。
  • 在方案2中,将无需拆分的列加入select语句即可,例如:select(Full name, Age, Favorite foods)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:10:30