Julia 朱莉娅:如何在DataFrames.jl中用一个函数创建多个列

Julia 朱莉娅:如何在DataFrames.jl中用一个函数创建多个列,julia,Julia,假设我有一个专栏 using DataFrames df = DataFrame(var = "methodA_mean") 我想通过提取A和mean var来创建两个新列,如下所示 3×3 DataFrame │ Row │ var │ ab │ stat │ │ │ String │ String │ String │ ├─────┼──────────────┼────────┼────────┤ │ 1 │ m

假设我有一个专栏

using DataFrames

df = DataFrame(var = "methodA_mean")
我想通过提取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    │
我可以编写一个正则表达式,从
var
列中提取“a”或“B”以及“mean”和“var”。但是我如何优雅地输出到多个列中呢

我尝试了下面的方法,效果不错,但我觉得应该有更优雅的方法来创建多个列

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

df.ab = getindex.(tmp, :ab)
df.stat = getindex.(tmp, :st)

我不确定您在代码的哪一部分寻求改进,因为我觉得这很正常,但您可以这样写:

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      │

我想这个问题可能更适合你,但我不确定。
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> 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      │