R语言如何实现数据表列转置为行(宽表转长表)?
R语言实现宽表转长表操作
你要做的是典型的宽格式数据转长格式数据操作,以下是两种可直接运行的实现方案:
方案1:使用tidyr包的pivot_longer(推荐)
这是目前R语言数据整理的主流用法,语法简洁易读:
# 第一步:构造你的原始示例数据 df <- data.frame( State = c("NY", "CA", "LA"), Republicans = c(20, 30, 20), Democrats = c(40, 40, 50), Others = c(5, 5, 5) ) # 加载tidyr包(如果没安装先运行 install.packages("tidyr") 安装) library(tidyr) # 执行转置操作 df_long <- pivot_longer( df, cols = -State, # 保留State列不动,其余所有列参与转置 names_to = "Party", # 原列名转为新的Party列的值 values_to = "Votes" # 原单元格数值转为新的Votes列的值 ) # 可选:按State排序,和你给出的预期结果顺序完全一致 df_long <- df_long[order(df_long$State), ]
方案2:基础R原生实现(无需安装第三方包)
如果你不想安装额外包,可以用R自带的reshape函数实现:
# 构造原始数据和上面一致 df <- data.frame( State = c("NY", "CA", "LA"), Republicans = c(20, 30, 20), Democrats = c(40, 40, 50), Others = c(5, 5, 5) ) # 执行转置操作 df_long <- reshape( df, idvar = "State", varying = 2:4, # 第2到第4列是需要转置的列 v.names = "Votes", times = c("Republicans", "Democrats", "Others"), direction = "long" ) # 调整列名和行号,得到最终格式 df_long <- df_long[, c("State", "time", "Votes")] colnames(df_long)[2] <- "Party" rownames(df_long) <- NULL
两种方案输出的结果都和你要求的目标格式完全匹配。
内容的提问来源于stack exchange,提问作者Clara
相关产品推荐
相关产品推荐

