首页 > 解决方案 > Julia:如何在 DataFrames.jl 中使用一个函数创建多列

问题描述

说我有一个专栏

using DataFrames

df = DataFrame(var = "methodA_mean")
1×3 DataFrame
│ Row │ var          │
│     │ String       │
├─────┼──────────────┼
│ 1   │ methodA_mean │
│ 2   │ methodB_var  │
│ 3   │ methodA_var  │

我想通过提取 A 和 mean var 来创建两个新列

3×3 DataFrame
│ Row │ var          │ ab     │ stat   │
│     │ String       │ String │ String │
├─────┼──────────────┼────────┼────────┤
│ 1   │ methodA_mean │ A      │ mean   │
│ 2   │ methodB_var  │ B      │ var    │
│ 3   │ methodA_var  │ A      │ var    │

我可以从列中编写一个正则表达式提取“A”或“B”以及“mean”和“var” var。但是我如何优雅地输出到多列?

我尝试了以下方法并且它有效,但我觉得应该有更优雅的方式来创建多个列

tmp = match.(r"method(?<ab>A|B)_(?<stat>mean|var)", df.var)

df.ab = getindex.(tmp, :ab)
df.stat = getindex.(tmp, :st)
3×3 DataFrame
│ Row │ var          │ ab       │ stat     │
│     │ String       │ SubStri… │ SubStri… │
├─────┼──────────────┼──────────┼──────────┤
│ 1   │ methodA_mean │ A        │ mean     │
│ 2   │ methodB_var  │ B        │ var      │
│ 3   │ methodA_var  │ A        │ var      │

标签: julia

解决方案


我不确定您在代码的哪个部分寻找改进,因为这对我来说似乎很正常并且可以,但是您可以这样写:

julia> insertcols!(df, :ab => last.(first.(df.var, 7), 1), :stat => chop.(df.var, head=8, tail=0))
3×3 DataFrame
│ Row │ var          │ ab     │ stat     │
│     │ String       │ String │ SubStri… │
├─────┼──────────────┼────────┼──────────┤
│ 1   │ methodA_mean │ A      │ mean     │
│ 2   │ methodB_var  │ B      │ var      │
│ 3   │ methodA_var  │ A      │ var      │

推荐阅读