R语言如何通过新增列合并DataFrame重复行实现长表转宽表
R长表转宽表实现方案
你原有代码运行异常的核心原因是基础R的reshape函数对timevar对应的变量格式要求较严格,你的Round列大概率是未指定水平的字符型,或者存在拼写/空格不一致的异常值,导致无法正确拆分列。
方案1:使用tidyr包的pivot_wider(推荐,写法更简洁不易出错)
如果未安装tidyr先运行install.packages("tidyr"),之后执行以下代码即可:
library(tidyr) df_wide <- pivot_wider(df, names_from = Round, values_from = SC)
运行后直接得到你需要的宽表结构,列名自动匹配Round的取值。
方案2:修正基础R reshape写法
如果要使用基础包实现,先统一Round列的格式为指定水平的因子,再调用reshape并明确指定值列参数:
# 先修正Round列为因子,按你需要的顺序指定水平,注意和你实际数据的取值完全匹配 df$Round <- factor(df$Round, levels = c("Round 1", "Round 2", "Round 3")) # 调用reshape时显式指定v.names参数 df_wide <- reshape(df, idvar = "Player", timevar = "Round", v.names = "SC", direction = "wide") # 如果需要去掉列名的SC.前缀,可以加一步修改列名 colnames(df_wide) <- gsub("SC\\.", "", colnames(df_wide))
内容的提问来源于stack exchange,提问作者Fonti
相关产品推荐
相关产品推荐

