在R中如何翻转dataframe,将Var列的取值转换为表格表头?
R长表转宽表实现方案
你需要的是长格式数据转宽格式的操作,R有成熟的高效实现方案,无需手动转置处理:
方法1:tidyverse 生态 pivot_wider 函数(推荐,效率高易上手)
如果未安装tidyverse先执行安装:install.packages("tidyverse")
操作代码示例:
library(tidyverse) # 构造你的示例数据 df <- data.frame( Var = rep(c("A","B","C","D","E"), 2), Result = c(0.1, NA, 2.5, NA, NA, 0.45, NA, NA, 2.2, 0.13), Location = rep(c("FL", "GA"), each = 5) ) # 执行宽表转换 df_wide <- df %>% pivot_wider( id_cols = Location, # 保留为行标识的列 names_from = Var, # 取值作为新列名的列 values_from = Result # 填充到新列的数值来源列 )
转换后输出结果:
# A tibble: 2 × 6 Location A B C D E <chr> <dbl> <lgl> <dbl> <dbl> <dbl> 1 FL 0.10 NA 2.5 NA NA 2 GA 0.45 NA NA 2.2 0.13
- 注意:如果同一个
Location下同一个Var存在多个Result值,可添加values_fn参数指定聚合规则,例如求和用values_fn = sum、多值拼接用values_fn = ~paste(., collapse = ";"),避免生成列表列。
方法2:基础R原生实现(无需安装第三方包)
用内置reshape函数即可完成转换:
df_wide <- reshape( df, idvar = "Location", timevar = "Var", direction = "wide" ) # 去掉默认生成的列名前缀 colnames(df_wide) <- sub("Result\\.", "", colnames(df_wide))
内容的提问来源于stack exchange,提问作者Cbotelho
相关产品推荐
相关产品推荐

