Dataframe 朱莉娅。将一列汇总为具有多列的新数据框

Dataframe 朱莉娅。将一列汇总为具有多列的新数据框,dataframe,julia,data-wrangling,Dataframe,Julia,Data Wrangling,我需要按一个变量对数据帧进行分组,然后通过添加与另一个变量的.25、.5、.75分位数相关的行数(我已经可以这样做)和列数来对其进行汇总 在R中,我会这样做,例如: iris%>% 组别(种类)%>% 总结( 分位数(萼片长度,c(.25,.75))%>% 矩阵(nrow=1)%>% as.data.frame()%>% 设置名称(粘贴0(“萼片长度”,c(.25,.75))) ) 使用DataFrames和DataFrameMeta在Julia中编写这篇文章的简明方法是什么?如果有一种解决方

我需要按一个变量对数据帧进行分组,然后通过添加与另一个变量的.25、.5、.75分位数相关的行数(我已经可以这样做)和列数来对其进行汇总

在R中,我会这样做,例如:

iris%>%
组别(种类)%>%
总结(
分位数(萼片长度,c(.25,.75))%>%
矩阵(nrow=1)%>%
as.data.frame()%>%
设置名称(粘贴0(“萼片长度”,c(.25,.75)))
)
使用DataFrames和DataFrameMeta在Julia中编写这篇文章的简明方法是什么?如果有一种解决方案可以同时将其应用于多个列,那么效果会更好

我在Julia身上找到的最接近的解决方案是:

groupby(iris, :Species) |>
   x -> combine(x, :Sepal.Length => x -> [[map(p -> quantile(x, p), (Q25 = 0.25, Q75 = 0.75))] |> DataFrame])

但它只是将数据帧封装到一个单元格中,而它应该将数据帧分散到多个列中。

这是我目前可以建议您的最短时间:

combine(groupby(iris, :Species), :SepalLength => (x -> (quantile(x, [0.25, 0.75]))') => [:q25, :q75])
或者类似地

combine(groupby(iris, :Species), :SepalLength => (x -> [quantile(x, [0.25, 0.75])]) => [:25, :q75])

但即使是您最初的解决方案似乎也比R短一点。我也会将其改写为:

combine(groupby(iris, :Species), :SepalLength => (x -> map(p -> quantile(x, p), (Q25=0.25, Q75=0.75))) => AsTable)
看起来有点干净

现在,如果您想处理多个列,您可以这样做(顺便说一句,在R中您将如何做到这一点?)


你好出于某种原因,解决方案3适合我!让
df=DataFrame(a=sample(1:2200),b=randn(200),c=randn(200))
,这样
df
代替虹膜,
a
代替物种,
b
c
作为其他变量,我得到这些错误,按照你所做的例子的顺序:1。ArgumentError:无法识别的列选择器::b=>(var“#5#6”(=>[:q25,:q75])2。ArgumentError:无法识别的列选择器::b=>(var“#9#10”(=>[:q25,:q75])3。好的。ArgumentError:无法识别的列选择器::b=>(var“#15#17”(=>AsTable)5。ArgumentError:无法识别的列选择器:“b”=>(var“#24#26”(=>[“b#q25”,“b#q75]”)您安装了一些对DataFrames.jl版本有限制的包。有关如何找出是什么程序包导致这种情况的说明,请参阅。当您发现问题时,请告诉我,这样我就可以让包维护人员知道该包需要更新。在Julia中,通常的做法是为每个项目使用单独的环境,请参见。这应该可以解决您的问题。您需要安装
]添加JuliaDB#main
,因为允许最新版本pooledarays.jl的JuliaDB.jl版本尚未发布。同样在genral中-如上所述。最好不要将JuliaDB放在一个全局包环境中,而只放在您需要的特定于项目的环境中(这样您就不必使用
#main
来完成解决方案)。完成后,现在一切都正常了
combine(groupby(iris, :Species), :SepalLength => (x -> map(p -> quantile(x, p), (Q25=0.25, Q75=0.75))) => AsTable)
combine(groupby(iris, :Species), [n => (x -> (quantile(x, [0.25, 0.75]))') => [n*"_q25", n*"_q75"] 
                                  for n in ["SepalLength",  "SepalWidth", "PetalLength", "PetalWidth"]])