Julia使用Pingouin.jl正态检验时DataFrame转DataFrameRow方法
Pingouin.jl 多列正态性检验合并结果解决方案
报错原因
push!方法不支持将DataFrame类型作为元素插入另一个DataFrame,你对单列调用Pingouin.normality返回的是仅含1行的DataFrame,需要做简单转换后再合并。
方案1:直接纵向拼接(推荐)
直接用vcat拼接所有单列检验的单行DataFrame,无需额外类型转换:
function var_norm(df) norm_res = DataFrame() for col in names(df) col_res = Pingouin.normality(df[!, col], method="jarque_bera") norm_res = vcat(norm_res, col_res) end # 新增列对应检验的变量名,方便后续使用 norm_res.variable = names(df) return norm_res end
方案2:转换为DataFrameRow后push
如果你需要保留push!的写法,取单行DataFrame的第一行即可得到DataFrameRow类型:
function var_norm(df) # 用第一列的检验结果初始化相同结构的空DataFrame first_col_res = Pingouin.normality(df[!, 1], method="jarque_bera") norm_res = similar(first_col_res, 0) for col in names(df) col_res = Pingouin.normality(df[!, col], method="jarque_bera") # 取第一行转为DataFrameRow后再push push!(norm_res, col_res[1, :]) end norm_res.variable = names(df) return norm_res end
两种方案返回的结果结构和废弃前的多列调用接口返回结果完全一致,直接调用var_norm(dataset)即可得到所有列的正态性检验合并结果。
内容的提问来源于stack exchange,提问作者BuddhiLW
相关产品推荐
相关产品推荐

