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

R语言中如何转置并合并列?新手技术求助

嘿,刚接触R遇到这种格式转换完全不用慌,这其实是很常见的宽格式转长格式需求,给你两个简单好用的方法:

方法1:用Base R自带的stack()函数

这个方法不用额外装包,直接就能用,步骤很清晰:

首先先把你的示例数据构造出来(方便你直接测试):

df <- data.frame(
  A = 1:5,
  B = 1:5,
  C = 1:5
)

然后用stack()转换,再调整列的顺序和名称:

# 转换格式
result <- stack(df)
# 调整列顺序(把变量名放前面),并重命名列
result <- result[, c("ind", "values")]
colnames(result) <- c("Variable", "Value")

# 查看结果
print(result)

stack()会自动把原来的列名存到ind列,对应的值存到values列,调整一下就完全符合你的需求啦。

方法2:用tidyverse的pivot_longer()(更灵活)

如果你之后要处理更复杂的数据,tidyverse的这个函数会更顺手,先确保你装了tidyverse包:

# 没装过的话先安装
# install.packages("tidyverse")
library(tidyverse)

然后一行代码搞定转换:

result <- df %>%
  pivot_longer(
    cols = everything(),  # 选择所有列进行转换
    names_to = "Variable",# 指定原来的列名存在这个新列里
    values_to = "Value"   # 指定原来的值存在这个新列里
  )

print(result)

这个方法的好处是,如果你只想转换部分列,比如只转A和B,把cols = everything()改成cols = c(A, B)就行,非常灵活。

额外:输出成纯文本格式(无列名)

如果你的需求是直接输出像示例里那样没有列名的纯文本,可以用write.table():

write.table(result, row.names = FALSE, col.names = FALSE, sep = " ")

这样就能得到你要的每行是「变量名 + 空格 + 值」的格式啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:52:50