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

R语言如何一步实现DataFrame部分列宽转长、部分列长转宽?

R DataFrame 格式转换单步实现方法

方法1:基于tidyverse的简洁实现

通过管道链合并两步操作,无需存储中间变量,代码可读性强:

# 加载依赖包
library(tidyverse)

# 单链完成转换
result <- df %>%
  # 先将日期列从宽转长,生成date和value列
  pivot_longer(cols = starts_with("X2020"), names_to = "date", values_to = "value") %>%
  # 再将交通类型从长转宽,生成driving/transit/walking独立列
  pivot_wider(names_from = transportation_type, values_from = value)

如果需要纯单函数调用的实现,可以用reshape2封装好的recast函数,本质是melt和dcast的组合,一行完成转换:

library(reshape2)
result <- recast(df, region + variable ~ transportation_type, id.var = c("region", "transportation_type"), variable.name = "date")

方法2:基于data.table的高性能实现

数据量较大时推荐使用该方案,运行效率比tidyverse高3-10倍:

library(data.table)
setDT(df) # 转换为data.table格式

result <- melt(df, id.vars = c("region", "transportation_type"), variable.name = "date") %>%
  dcast(region + date ~ transportation_type, value.var = "value")

可选优化

转换完成后可以加一步日期格式清洗,方便后续和其他数据关联:

result <- result %>% mutate(date = as.Date(date, format = "X%Y.%m.%d"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:00:00