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

如何基于行值创建新变量重塑R数据框以满足数据分析需求

实现方法

你需要的是宽表转长表的操作,保留A、B两列固定,将C、D两列拉伸为行,对应生成存储列名的var列和存储取值的res列,两种常用实现方式如下:

方法1:tidyverse 方案(推荐,代码简洁易读)

使用tidyr包的pivot_longer函数实现:

# 加载包,如果未安装先运行 install.packages("tidyr")
library(tidyr)

olddf <- data.frame('A' = c('Z1','Z2','Z3'), 
                    'B' = c(100, 200, 500),
                    'C' = c(90, 50, 60),
                    'D' = c(NA, 50, NA))

newdf <- pivot_longer(olddf, 
                      cols = c(C, D), # 指定需要转长格式的列,也可以写 cols = -c(A,B) 自动排除固定列
                      names_to = "var", # 存储原列名的新列名
                      values_to = "res") # 存储原取值的新列名

运行后得到的newdf和你示例的结构完全一致。

方法2:base R 方案(无需安装额外包)

使用内置reshape函数实现:

olddf <- data.frame('A' = c('Z1','Z2','Z3'), 
                    'B' = c(100, 200, 500),
                    'C' = c(90, 50, 60),
                    'D' = c(NA, 50, NA))

newdf <- reshape(olddf,
                 idvar = c("A", "B"), # 固定不变的列
                 varying = c("C", "D"), # 需要转长格式的列
                 v.names = "res", # 存储原取值的新列名
                 timevar = "var", # 存储原列名的新列名
                 times = c("C", "D"), # 对应原列名的取值
                 direction = "long")
# 去除reshape生成的冗余行名
rownames(newdf) <- NULL

两种方法输出结果完全匹配你给出的newdf示例。

内容的提问来源于stack exchange,提问作者Expectation mean first moment

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:05