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

在R中如何将含逗号分隔值的CSV数据整理为三列格式?

问题描述

我继承了一个数据集,其中个体大小数据以逗号分隔值的形式存储在单元格中,原始数据格式如下:

DateSpecies1Species2
07302222,4488,84,84
07282235,67,1978,73

需要提取这些大小数据并保留元数据,转换为如下三列格式:

DateSpeciesSize
073022Species122
073022Species144
073022Species288
073022Species284
.........

已知可能用到strsplit、unnest或separate函数,但不清楚如何应用,求实现方法。


解决方案(R语言)

用tidyverse工具链可以轻松实现,下面提供两种常用方法:

方法一:分步拆分+展开

library(tidyverse)

# 模拟原始数据
original_data <- tibble(
  Date = c("073022", "072822"),
  Species1 = c("22,44", "35,67,19"),
  Species2 = c("88,84,84", "78,73")
)

tidy_data <- original_data %>%
  # 宽表转长表,提取物种名称和对应大小字符串
  pivot_longer(cols = starts_with("Species"),
               names_to = "Species",
               values_to = "Size_str") %>%
  # 拆分逗号分隔的字符串为列表
  mutate(Size = str_split(Size_str, ",")) %>%
  # 展开列表为多行
  unnest(Size) %>%
  # 可选:将Size转为数值类型,方便后续分析
  mutate(Size = as.integer(Size)) %>%
  # 移除临时列
  select(-Size_str)

print(tidy_data)

关键函数解释

  • pivot_longer():把原表中Species1、Species2这类列,转换为Species(存储物种名)和Size_str(存储逗号分隔的大小字符串)两列。
  • str_split():将每个Size_str按逗号拆分,生成字符列表(比如"22,44"会变成c("22", "44"))。
  • unnest():把列表类型的Size列展开,每个列表元素对应一行,同时保留Date和Species的元数据。

方法二:用separate_rows一步到位

separate_rows()可以直接将逗号分隔的字符串拆分成多行,代码更简洁:

library(tidyverse)

tidy_data <- original_data %>%
  pivot_longer(cols = starts_with("Species"),
               names_to = "Species",
               values_to = "Size") %>%
  separate_rows(Size, sep = ",") %>%
  mutate(Size = as.integer(Size))

print(tidy_data)

这个方法里,separate_rows()替代了str_split()+unnest()的组合,直接完成拆分和行展开的操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:55:25