R语言如何添加动态命名新列扩展DataFrame并存储对应值
你猜测的方向是对的,melt做的是宽表转长表的长宽重塑操作,你需要的反向长表转宽表操作,按下面的方法实现即可。
方法1:tidyverse 生态推荐写法(最简便)
直接调用tidyr包的pivot_wider()函数,不需要额外手动改列名,一步得到目标结果:
library(tidyr) library(dplyr) # 把代码里的df替换成你自己的原始数据框变量名即可 df_wide <- df %>% pivot_wider( names_from = varname, values_from = count, names_glue = "{varname}_count" )
参数说明:
names_from = varname:指定以varname字段的唯一值作为新列的列名来源values_from = count:指定新列的填充值取自count字段names_glue = "{varname}_count":统一设置新列命名规则,自动给每个类别列加上_count后缀,和你预期的列名完全匹配
小提示:如果存在某个
name + GRADUATION_RATE组合下缺少某类varname记录的情况,对应位置会默认填充为NA,如果你需要填充为0,可以在pivot_wider里加参数values_fill = list(count = 0)即可。
方法2:reshape2 包传统写法
如果你之前用的是reshape2体系的melt,对应的反向操作函数是dcast,写法如下:
library(reshape2) df_wide <- dcast( data = df, formula = name + GRADUATION_RATE ~ varname, value.var = "count" ) # 手动给生成的类别列加后缀 colnames(df_wide)[3:ncol(df_wide)] <- paste0(colnames(df_wide)[3:ncol(df_wide)], "_count")
两种方法运行后都会得到你预期的输出:同一name和GRADUATION_RATE的记录合并为一行,不同varname对应的count值分别填充到对应列中。
内容的提问来源于stack exchange,提问作者Aryan poonacha
相关产品推荐
相关产品推荐

