julia - Julia - 如何按组聚合许多列
问题描述
使用 Julia 1.0
我正在尝试按组聚合(在本例中为均值中心)几列,并寻找一种循环遍历列的方法,而不是显式地编写所有列名。以下内容有效,但我正在为我有很多列的情况寻找更简洁的语法。
using DataFrames, Statistics
dd=DataFrame(A=["aa";"aa";"bb";"bb"], B=[1.0;2.0;3.0;4.0], C=[5.0;5.0;10.0;10.0])
by(dd, :A, df -> DataFrame(bm = df[:B].-mean(df[:B]), cm = df[:C].-mean(df[:C])))
有没有办法循环 [:B, :C] 而不是为每个单独编写语句?
解决方案
您可以使用aggregate
:
julia> centered(col) = col .- mean(col)
centered (generic function with 1 method)
julia> aggregate(dd, :A, centered)
4×3 DataFrame
│ Row │ A │ B_centered │ C_centered │
│ │ String │ Float64 │ Float64 │
├─────┼────────┼────────────┼────────────┤
│ 1 │ aa │ -0.5 │ 0.0 │
│ 2 │ aa │ 0.5 │ 0.0 │
│ 3 │ bb │ -0.5 │ 0.0 │
│ 4 │ bb │ 0.5 │ 0.0 │
请注意,函数名称用作后缀。如果您需要更多自定义后缀,请使用by
并传递一个更花哨的第三个参数,该参数会遍历传递的列,并为其提供适当的名称。
推荐阅读
- .net-core - .NET Core 的 NuGet 后备文件夹存储在 Windows 中的什么位置?
- vue.js - v-menu 的 Vuetify 问题
- reactjs - Dropbox Api 获取所有图像
- html - 内容溢出时 Flex 包装器不扩展
- python - Flask - 调用路线并返回第一条路线
- jenkins - Jenkins CI/CD 流水线工具和阶段
- generics - “不能使用 myType 作为类型接口{}”?我认为 Go 中的所有类型都算作 interface{} 吗?
- php - Laravel注销功能不起作用
- sql - 查询出一列数字字段的前3位
- ajax - Django - AJAX - 为什么我需要 url 参数?