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

在R语言中将多行数据转换为带行索引的单列

把宽格式数据框转为按行ID索引的长格式(R语言实现)

下面提供几种简单直接的实现方法,完全匹配你需要的转换效果:

方法1:使用tidyr包的pivot_longer(语法清晰,推荐)

这个方法属于tidyverse生态,代码可读性高,适合日常数据处理:

# 若未安装tidyr包,先执行安装:install.packages("tidyr")
library(tidyr)

# 构造示例数据
X1 <- c(1,2,3,2,2)
X2 <- c(1,2,3,2,2)
X3 <- c(1,2,3,3,2)
X4 <- c(1,2,2,2,2)
X <- data.frame(X1,X2, X3, X4)

# 添加行ID列,再转成长格式
X$id <- as.integer(rownames(X))
Y <- pivot_longer(X, cols = starts_with("X"), names_to = NULL, values_to = "Y1")

# 查看转换结果
Y

方法2:base R原生实现(无需额外装包)

如果不想加载外部包,可以用base R的基础函数快速完成:

# 构造示例数据
X1 <- c(1,2,3,2,2)
X2 <- c(1,2,3,2,2)
X3 <- c(1,2,3,3,2)
X4 <- c(1,2,2,2,2)
X <- data.frame(X1,X2, X3, X4)

# 生成重复的行ID(每行对应原数据的4列,所以重复4次)
id <- rep(1:nrow(X), each = ncol(X))
# 按行提取所有值(转置后unlist保证顺序正确)
Y1 <- unlist(t(X))
# 组合成目标数据框
Y <- data.frame(id, Y1)

# 查看结果
Y

方法3:base R的reshape函数

适合习惯传统reshape语法的用户:

# 构造示例数据
X1 <- c(1,2,3,2,2)
X2 <- c(1,2,3,2,2)
X3 <- c(1,2,3,3,2)
X4 <- c(1,2,2,2,2)
X <- data.frame(X1,X2, X3, X4)

# 添加行ID
X$id <- 1:nrow(X)

# 转长格式并清理结果
Y <- reshape(X, direction = "long", varying = list(names(X)[1:4]), 
             v.names = "Y1", idvar = "id", times = NULL)
Y <- Y[,c("id", "Y1")]
rownames(Y) <- NULL

# 查看结果
Y

以上三种方法都能得到你需要的目标格式,可根据自己的使用习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:10:43