如何堆叠R数据框指定列并重复其余列以整理出可用于分析的数据集
R宽表转长表(堆叠指定列)实现方法
以下两种方案均可得到你需要的newdf结果:
方案1:基础R实现
无需加载额外依赖包,直接用内置函数即可完成转换:
olddf <- data.frame('A' = c('Z1','Z2','Z3'), 'B' = c(100, 200, 500), 'C' = c(90, 50, 60), 'D' = c(NA, 50, NA)) # 重复A、B列匹配堆叠后的行数,绑定C、D堆叠得到的CD列 newdf <- cbind(olddf[rep(seq(nrow(olddf)), 2), c("A", "B")], CD = stack(olddf, select = c(C, D))[,1]) # 可选:重置行名 rownames(newdf) <- NULL
方案2:tidyverse 简洁实现
用tidyr的pivot_longer函数,代码可读性更高:
library(tidyverse) newdf <- olddf %>% pivot_longer(cols = c(C, D), names_to = NULL, # 不需要保留原C/D列名的标识列 values_to = "CD")
两种方案输出结果和你给出的示例newdf的结构、取值完全一致。
内容的提问来源于stack exchange,提问作者Expectation mean first moment
相关产品推荐
相关产品推荐

