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

如何在R语言中将列转置为行并按需重复对应数据行?

在R中将宽格式数据转为长格式(列转行并重复对应行)

你需要将宽格式的汇率数据转换为长格式,使每种货币作为单独一行,同时重复对应的日期、年、月、日信息。以下是两种常用的实现方法:

第一步:构造示例数据集

先还原你提供的数据集:

df <- data.frame(
  Date = c("1994-1-1", "1995-1-1"),
  Year = c(1994, 1995),
  Month = c(1, 1),
  Day = c(1, 1),
  USD = c(10, 12),
  EUR = c(20, 30),
  JPY = c(5, 10)
)

方法一:使用tidyr包的pivot_longer()(推荐)

这是tidyverse生态下的标准方法,语法直观易读:

library(tidyr)

long_df <- pivot_longer(
  data = df,
  cols = c(USD, EUR, JPY),  # 指定需要转置为行的列
  names_to = "Currency",    # 原列名存入新列"Currency"
  values_to = "Currency/CCY" # 原列的数值存入新列"Currency/CCY"
)

# 查看转换后的结果
print(long_df)

转换后的输出:

# A tibble: 6 × 6
  Date     Year Month Day Currency `Currency/CCY`
  <chr>   <dbl> <dbl> <dbl> <chr>             <dbl>
1 1994-1-1  1994     1     1 USD                10
2 1994-1-1  1994     1     1 EUR                20
3 1994-1-1  1994     1     1 JPY                 5
4 1995-1-1  1995     1     1 USD                12
5 1995-1-1  1995     1     1 EUR                30
6 1995-1-1  1995     1     1 JPY                10

方法二:使用reshape2包的melt()

如果你习惯使用reshape系列工具,可以用melt()函数实现:

library(reshape2)

long_df <- melt(
  data = df,
  id.vars = c("Date", "Year", "Month", "Day"),  # 指定不需要转置的标识列
  variable.name = "Currency",                   # 存储原列名的新列名
  value.name = "Currency/CCY"                   # 存储原列数值的新列名
)

# 查看转换后的结果
print(long_df)

此方法的输出与方法一完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:12