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
相关产品推荐
相关产品推荐

