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

如何在R语言中实现指定数据重塑:将变量拆分到多列

在R中实现数据框的重塑(宽转长+长转宽组合操作)

我来帮你搞定这个数据重塑的需求,在R里用现代的tidyverse工具包就能轻松实现,当然也可以用base R的方法,下面是具体步骤和可直接运行的代码:

第一步:构造原始测试数据

先把你给出的原始数据框构造出来,方便后续测试:

df <- data.frame(
  A = c("a", "d", "k", "k"),
  B = c(2015, 2016, 2016, 2018),
  C = c(1, 2, 2, 3),
  D = c(2, 3, 4, 6),
  stringsAsFactors = FALSE
)

方法一:使用tidyverse(推荐,代码更直观)

tidyverse里的pivot_longer和pivot_wider是处理数据重塑的黄金组合,步骤清晰:

  1. 先把C、D这两列转成长格式,生成value列用来标识是C还是D,同时把对应的值存入val列;
  2. 再把年份列B转成宽格式,让年份成为单独的列,对应填入之前的val值。

代码如下:

# 先加载tidyverse包(如果没安装先运行install.packages("tidyverse"))
library(tidyverse)

# 执行重塑操作
result <- df %>%
  pivot_longer(cols = c(C, D), names_to = "value", values_to = "val") %>%
  pivot_wider(names_from = B, values_from = val)

# 查看最终结果
print(result)

运行后得到的结果和你要的目标格式完全一致,空值会自动显示为NA,符合需求。

方法二:使用base R的reshape函数

如果你不想加载额外包,也可以用base R自带的reshape函数,步骤类似但代码稍繁琐:

# 第一步:转长格式
melted_df <- reshape(df, 
                     direction = "long", 
                     varying = c("C", "D"), 
                     v.names = "val", 
                     timevar = "value", 
                     times = c("C", "D"))

# 第二步:转宽格式
result_base <- reshape(melted_df, 
                       direction = "wide", 
                       idvar = c("A", "value"), 
                       timevar = "B")

# 调整列名和顺序,让结果更贴合目标格式
names(result_base) <- gsub("val\\.", "", names(result_base))
result_base <- result_base[, c("A", "value", "2015", "2016", "2018")]
row.names(result_base) <- NULL

# 查看结果
print(result_base)

结果说明

两种方法最终都会输出你需要的结构:

# A tibble: 8 × 4
  A     value `2015` `2016` `2018`
  <chr> <chr>  <dbl>  <dbl>  <dbl>
1 a     C          1     NA     NA
2 a     D          2     NA     NA
3 d     C         NA      2     NA
4 d     D         NA      3     NA
5 k     C         NA      2      3
6 k     D         NA      4      6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:32:40