gpt4 book ai didi

julia - Julia 中分组列的多个汇总统计信息

转载 作者:行者123 更新时间:2023-12-04 03:39:08 25 4
gpt4 key购买 nike

我正在尝试使用以下代码与 Julia(1.5.3) 一起工作,它只是我正在尝试做的事情的一种表示。

using DataFrames
using DataFramesMeta
using RDatasets

## setup
iris = dataset("datasets", "iris")
gdf = groupby(iris, :Species)

## Applying the split combine
## This code works fine
combine(gdf, nrow, (valuecols(gdf) .=> mean))
但是,当我尝试为多个摘要执行此操作时,它失败了
 combine(gdf, nrow, (valuecols(gdf) .=> [mean, sum]))
错误 :

ERROR: DimensionMismatch("arrays could not be broadcast to a commonsize; got a dimension with lengths 4 and 2")


对错误的小调试表明,如果我将代码更改为:
combine(gdf, nrow, ([:SepalLength, :PetalLength] .=> [mean,sum]))
## This code works but its still not correct as it doesn't tell me the mean and sum of both the columns , rather mean for SepalLength and sum for PetalLength, which was expected as per previous error
对它进行更多研究,我意识到,我们可以做这样的事情,这个结果是正确的,但结果是表格的长形式而不是宽形式。我原以为这会给我问题的答案,但它似乎没有按预期工作。
 combine(gdf, ([:SepalWidth, :PetalWidth] .=>  x -> ([sum(x), mean(x)])))

## The code above works but output is 6x3 DataFrame, I was expecting 3x6 DataFrame
我的问题是 :
有没有办法以这样的方式使用拆分组合,从而得到如下所示的宽表(我使用“do end”和“combine”来生成它)。我对这个解决方案没问题,但我需要在这里输入所有列,有什么方法可以让我获得所有汇总统计数据(总和、中值、均值等)作为组合中提供的所有列的列。我希望我的问题很清楚,如果它重复或没有很好地传达,请指出。谢谢
combine(gdf) do x
return(sw_sum = sum(x.SepalWidth),
sw_mean = mean(x.SepalWidth),
sp_mean = mean(x.PetalWidth),
sp_sum = sum(x.PetalWidth)
)
end



## My expected answer should be similar to this
#3×5 DataFrame
# Row │ Species sw_sum sw_mean sp_mean sp_sum
# │ Cat… Float64 Float64 Float64 Float64
#─────┼────────────────────────────────────────────────
# 1 │ setosa 171.4 3.428 0.246 12.3
# 2 │ versicolor 138.5 2.77 1.326 66.3
# 3 │ virginica 148.7 2.974 2.026 101.3
此外,这有效:
 combine(gdf, [:1] .=> [mean, sum, minimum, maximum,median])
但这不会并抛出像上面那样的尺寸错误,仍然让我头疼:
combine(gdf, [:1, :2] .=> [mean, sum, minimum, maximum,median])

最佳答案

做:

 combine(gdf, nrow, vec(valuecols(gdf) .=> [mean sum]))
或者
 combine(gdf, nrow, (valuecols(gdf) .=> [mean sum])...)
或者
 combine(gdf, nrow, [n => f for n in valuecols(gdf) for f in [mean sum]])
(注意 meansum 之间没有逗号)
原因是你需要为广播 .=>添加一个额外的维度。以获得所有输入组合。
编辑: ...只是迭代一个集合并将其元素作为连续的位置参数传递给函数,例如:
julia> f(x...) = x
f (generic function with 1 method)

julia> f(1, [2,3,4]...)
(1, 2, 3, 4)

关于julia - Julia 中分组列的多个汇总统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66350756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com