R语言将8行选举数据框按选区分组重塑为2行宽表
你之前的dcast用法存在两处问题:一是公式左侧错误加入了CAND_NAME作为行标识,导致每个候选人单独保留一行;二是dcast单次只能处理单个值变量的宽化,你需要先整合多值变量再转换。两种实现方案如下:
方法1:使用tidyverse的pivot_wider(推荐,语法更直观)
library(tidyverse) df_wide <- df %>% pivot_wider( id_cols = AC_NAME, names_from = POSITION, values_from = c(CAND_NAME, PARTYABBRE, TOTVOTPOLL, POSITION) )
生成的列名自动为CAND_NAME_1、CAND_NAME_2、PARTYABBRE_1等格式,你后续可以按需重命名。
方法2:使用reshape2的melt + dcast组合
如果你需要使用reshape2体系实现,需要先把数据转为长格式再宽化:
library(reshape2) # 先把除AC_NAME、POSITION外的变量合并成长格式 df_long <- melt(df, id.vars = c("AC_NAME", "POSITION")) # 再按选区聚合,变量+排名作为列名 df_wide <- dcast(df_long, AC_NAME ~ variable + POSITION, value.var = "value")
两种方法输出的结果结构完全一致,都能实现每个选区对应一行的宽表需求。
内容的提问来源于stack exchange,提问作者DSR
相关产品推荐
相关产品推荐

