将含缺失值的长格式R数据框转换为宽格式的技术求助
解决R语言数据框转宽格式的问题
不用for循环,用dplyr+tidyr的组合就能轻松搞定,步骤如下:
1. 加载必要工具包
library(dplyr) library(tidyr)
2. 清理原始数据
先过滤掉fruit或fertiliser列的NA值(这些行无法对应到目标的3×9组合,留着没用):
clean_df <- df %>% filter(!is.na(fruit), !is.na(fertiliser))
3. 转成目标宽格式
用pivot_wider直接完成转换,自动生成a_mean、b_lower_ci这类命名的列:
wide_df <- clean_df %>% pivot_wider( # 指定行的唯一标识:水果+肥料组合 id_cols = c(fruit, fertiliser), # 用method的取值作为列名前缀 names_from = method, # 需要展开的指标字段 values_from = c(mean, lower_ci, upper_ci, pval, x, y), # 拼接列名的规则:method值+下划线+指标名 names_glue = "{method}_{.value}" )
补充说明
如果某个fruit-fertiliser-method组合缺失数据,转换后对应位置会是NA,你可以用values_fill参数指定填充值,比如:
wide_df <- clean_df %>% pivot_wider( id_cols = c(fruit, fertiliser), names_from = method, values_from = c(mean, lower_ci, upper_ci, pval, x, y), names_glue = "{method}_{.value}", # 给数值型字段填充NA,也可以换成0之类的自定义值 values_fill = list(mean = NA_real_, lower_ci = NA_real_, upper_ci = NA_real_, pval = NA_real_, x = NA_real_, y = NA_real_) )
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

