求助:基于STATS因子水平重塑bands_F数据框指定列的方法
解决方案:将STATS水平转为波段列后缀
你的需求是把bands_F数据框中,按STAND、COMPANY、SPACING、SPECIES、AGE分组,将STATS的不同水平(MEAN/SD/MIN/MAX)作为后缀,把B2/B3/B4/B8的数值分别对应到新列(比如B2_MEAN、B3_MAX等),也就是长格式转宽格式,以下是两种常用实现方法:
方法1:使用tidyverse的pivot_wider(推荐)
先加载tidyverse包,然后用pivot_wider完成重塑:
# 加载包 library(tidyverse) # 执行重塑 bands_wide <- bands_F %>% pivot_wider( id_cols = c(STAND, COMPANY, SPACING, SPECIES, AGE), # 分组的标识列 names_from = STATS, # 作为列后缀的列 values_from = c(B2, B3, B4, B8), # 需要转换的数值列 names_glue = "{.value}_{names_from}" # 新列名的格式:原列名_后缀 ) # 查看结果结构 str(bands_wide)
方法2:使用Base R的reshape函数
如果不想加载额外包,可以用原生的reshape函数:
# 执行重塑 bands_wide_base <- reshape( bands_F, idvar = c("STAND", "COMPANY", "SPACING", "SPECIES", "AGE"), timevar = "STATS", direction = "wide", sep = "_" # 列名分隔符 ) # 查看结果结构 str(bands_wide_base)
两种方法都能得到你需要的输出格式:每个波段列都会生成对应STATS水平的新列,标识列(STAND/COMPANY等)保留唯一行。
内容的提问来源于stack exchange,提问作者Leprechault
相关产品推荐
相关产品推荐

