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

R语言如何将3列72行dataframe转换为9列9行的数据框

R语言3列72行数据框转9列9行结构实现方案

该转换属于典型的长表转宽表操作,按分组维度拆分后横向拼接即可,无需编写复杂循环,下面提供两种可直接运行的实现方案:

方案1:tidyverse实现(代码简洁不易错)

如果未安装tidyverse包,先运行安装命令,已安装可直接跳过:

install.packages("tidyverse")
library(tidyverse)

假设原始数据框命名为df_raw,运行以下代码即可得到目标结构:

df_target <- df_raw %>%
  # 按行、列分组维度排序,避免数据错位
  arrange(.[[1]], .[[2]]) %>%
  # 为每个行分组生成对齐用的行序号
  group_by(.[[1]]) %>%
  mutate(rn = row_number()) %>%
  # 执行长转宽操作
  pivot_wider(names_from = names(.)[2], values_from = names(.)[3]) %>%
  # 移除临时生成的序号列
  select(-rn) %>%
  ungroup()

如果你的分组列、值列不是默认的第1、2、3列,把代码中对应的列索引替换为实际列名即可。

方案2:基础R实现(无第三方包依赖)

无需安装任何扩展包,直接运行以下代码:

# 按第一列的行分组拆分原始数据
split_data <- split(df_raw, f = df_raw[[1]])
# 按行对齐横向拼接全部分组
df_target <- as.data.frame(do.call(cbind, split_data))
# 移除拼接产生的重复分组列
df_target <- df_target[, !duplicated(names(df_target))]

注意事项

  • 运行代码前先清理原始数据的缺失值、多余空行,避免拼接错位
  • 快速校验逻辑:统计原始数据第一列去重后共9个值、第二列去重后共8个值时,上述代码输出结果即为9行9列的目标结构,和你给出的样例结构完全匹配
  • 若输出列名顺序不符合预期,可使用select()函数(tidyverse方案)或列索引调整顺序即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:51:12