You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将昆虫物种-位置宽格式Dataframe转换为长格式表格

宽格式DataFrame转长格式解决方案

原始数据格式

你的宽格式DataFrame结构如下:

Species ASpecies BSpecies C
Location A01
Location B2120
Location C050

目标长格式

需要转换为包含Number(数量)、Species(物种)、Location(采样位置)的长格式:

NumberSpeciesLocation
0Species ALocation A
2Species ALocation B
0Species ALocation C
1Species BLocation A
12Species BLocation B
5Species BLocation C
0Species CLocation B
0Species CLocation C

实现步骤(Julia)

使用Julia的DataFrames包中的stack函数可轻松实现宽转长,步骤如下:

  1. 安装/加载DataFrames包
    如果未安装包,先执行安装命令:
using Pkg
Pkg.add("DataFrames")

加载包:

using DataFrames
  1. 预处理原始DataFrame
    若原始DataFrame将采样位置作为行名,需先将行名转为显式的Location列:
# 构建对应原始结构的宽表
df_wide = DataFrame(
    "Species A" => [0, 2, 0],
    "Species B" => [1, 12, 5],
    "Species C" => [missing, 0, 0],
    row_names = ["Location A", "Location B", "Location C"]
)

# 将行名转为Location列
df_wide[!, :Location] = rownames(df_wide)
# 调整列顺序,把Location列移至最前
select!(df_wide, :Location, :)
  1. 执行宽转长转换
    用stack函数指定堆叠列(除Location外的所有列),并设置变量名和值列名:
# 生成目标长格式DataFrame
df_long = stack(df_wide, Not(:Location), variable_name=:Species, value_name=:Number)
  1. 可选:过滤空值+排序
    若需移除数量为空的行,并按物种、采样位置排序以匹配目标格式:
# 过滤缺失值
df_long = dropmissing(df_long, :Number)
# 按物种、采样位置排序
sort!(df_long, [:Species, :Location])

执行完成后,df_long即为你需要的长格式DataFrame。

内容的提问来源于stack exchange,提问作者Julia N.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:22:22