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

如何用R语言按相同ID将多列数据转为单列多行格式?

R语言实现ID匹配的列转行最简方案

直接用tidyr包的pivot_longer函数是最简洁直观的方式,不需要复杂的分组操作。

步骤1:构造原始数据

先把示例数据转换成R的数据框:

df <- data.frame(
  ID = c(1, 2, 3, 3, 4, 4, 4),
  V1 = c(3, 3, 5, 2, 2, 5, 1),
  V2 = c(2, 4, 1, 3, 3, 7, 3)
)

步骤2:用pivot_longer实现转换

一行代码就能完成需求,指定要合并的列(除了ID之外的所有列),并设置新列名:

library(tidyr)

# 转换数据
result <- pivot_longer(df, cols = -ID, names_to = NULL, values_to = "V3")

执行后得到的result就是你要的格式:

ID    V3
1   1     3
2   1     2
3   2     3
4   2     4
5   3     5
6   3     1
7   3     2
8   3     3
9   4     2
10  4     3
11  4     5
12  4     7
13  4     1
14  4     3

备选:Base R实现(无需额外包)

如果不想加载第三方包,可以用reshape函数:

result_base <- reshape(df, 
                       direction = "long", 
                       varying = c("V1", "V2"), 
                       v.names = "V3", 
                       idvar = "ID", 
                       times = NULL)
# 调整列顺序并去除行名
result_base <- result_base[, c("ID", "V3")]
rownames(result_base) <- NULL

说明

你之前尝试的group by其实没必要,这类列转行操作本质是宽表转长表,pivot_longer是专门做这个的工具,逻辑清晰且代码极简。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:45:25