R语言如何将数据框列转置为变量存入新增列实现宽表转长表
完全可以实现,你需要的是常见的宽表转长表操作,以下是两种常用实现方案:
方案1:使用tidyverse套件的pivot_longer(更推荐,语法简洁)
这是目前R语言中处理长宽表转换最常用的方法,代码如下:
# 未安装包可先运行 install.packages("tidyr") library(tidyr) # 转换操作:排除ID、NAME列,其余列转为TYPE和VALUE BD2 <- BD %>% pivot_longer( cols = -c(ID, NAME), names_to = "TYPE", values_to = "VALUE" )
运行后得到的BD2和你给出的预期结构完全一致。
方案2:基础R原生方法(无需安装额外包)
如果不想依赖第三方包,可以用基础R自带的reshape函数实现:
BD2 <- reshape( BD, varying = 3:5, # 指定要转置的列位置,这里是第3到第5列 v.names = "VALUE", idvar = c("ID", "NAME"), # 指定保持不变的标识列 timevar = "TYPE", times = names(BD)[3:5], # 取原列名作为TYPE的取值 direction = "long" ) # 去除自动生成的冗余行名 rownames(BD2) <- NULL
两种方案生成的结果都和你预期的构造代码输出完全匹配,会保留原有的NA值,无需额外处理。
内容的提问来源于stack exchange,提问作者Bruno Avila
相关产品推荐
相关产品推荐

