如何在R中重组dataframe,将站点观测长表转换为宽表结构?
R语言长表转宽表实现方案
你需要完成的是长格式数据转宽格式的操作,不需要手动拼接唯一ID,直接用站点和观测日期两个字段作为分组标识即可,两种常用实现方式如下:
方法1:tidyverse实现(推荐初学者使用,语法可读性高)
# 未安装依赖包先执行 install.packages("tidyverse") library(tidyverse) # 执行宽表转换 wide_df <- pivot_wider( data = 替换为你的原数据框名称, id_cols = c(`SITE ID`, `DATE OF OBSERVATION`), names_from = `PARAMETER NAME`, values_from = VALUE )
参数说明:
id_cols:指定用于唯一标记单次观测的列,这里直接用站点ID和观测日期两个字段即可names_from:指定用原表中参数名称列的取值作为新生成的列名values_from:指定用原表中数值列的取值填充新生成的参数列- 注意:带空格的列名需要用反引号
`包裹,避免语法报错
方法2:基础R实现(无需额外安装依赖包)
wide_df <- reshape( data = 替换为你的原数据框名称, idvar = c("SITE ID", "DATE OF OBSERVATION"), timevar = "PARAMETER NAME", v.names = "VALUE", direction = "wide" )
常见问题处理
如果运行转换代码时提示值存在冲突,说明同一个站点、同一个观测日期下同一个参数存在多个重复测量值,可以添加参数指定聚合规则,比如取所有重复值的平均值:
wide_df <- pivot_wider( data = 替换为你的原数据框名称, id_cols = c(`SITE ID`, `DATE OF OBSERVATION`), names_from = `PARAMETER NAME`, values_from = VALUE, values_fn = mean )
如果转换完成后需要修改参数列名为你要求的格式,可以用rename()函数实现:
wide_df <- rename(wide_df, `PARAMETER 1` = 替换为原参数1的名称, `PARAMETER 2` = 替换为原参数2的名称 )
内容的提问来源于stack exchange,提问作者Sabrina Xie
相关产品推荐
相关产品推荐

