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

R语言数据框操作:按重复行拆分与长表转宽表的实现方案

R语言数据处理问题解决方案

1. 按重复行拆分data.frame

如果你想按照某一列(比如你的code列)的重复值来拆分data.frame,有几种简单实用的方法:

Base R 原生方法

直接用split()函数按分组列拆分,返回一个列表,每个元素对应一组重复行的子数据框:

# 假设你的数据框名为df
split_df_list <- split(df, df$code)

tidyverse 便捷方法

如果你习惯用dplyr的链式语法,group_split()会更贴合你的使用习惯:

library(dplyr)
split_df_list <- df %>% 
  group_by(code) %>% 
  group_split(.keep = TRUE)

.keep = TRUE会保留所有列,要是只想保留分组相关列,把参数改成FALSE就行。


2. 长格式转宽格式(你的具体需求)

针对你给出的数据集结构,要把code转成列名、date作为行标识、value填充对应单元格,用tidyr的pivot_wider()是最直观的方案,步骤如下:

步骤1:加载必要工具包(未安装先执行安装)

# 安装包含tidyr和dplyr的tidyverse集合包
# install.packages("tidyverse")
library(tidyverse)

步骤2:执行宽格式转换

先筛选出需要的列(避免uname和tcode干扰转换结果),再完成转宽:

wide_df <- df %>%
  select(date, code, value) %>%  # 只保留核心的三列
  pivot_wider(
    id_cols = date,               # 用来唯一标识每一行的列
    names_from = code,            # 要转成新列名的列
    values_from = value           # 填充新列的数值来源
  )

执行后得到的结果就和你期望的结构完全一致了。

备选方案(reshape2包)

如果你更习惯用reshape2,dcast()也能实现同样的效果:

# install.packages("reshape2")
library(reshape2)
wide_df <- dcast(df, date ~ code, value.var = "value")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:42:36