给定dfJulia 中的 DataFrame :
using DataFrames
df = DataFrame(X = ['A', 'B', 'C'], Y = ["a|b", "a|c", "b|b"])
Run Code Online (Sandbox Code Playgroud)
如何通过在“|”处拆分 Y 列来创建 Y1 和 Y2 列 分隔符?
例如,在 R tidyverse 我会这样做:
separate(df, Y, c("Y1", "Y2"), by = "\\|")
Run Code Online (Sandbox Code Playgroud)
据我所知,没有内置函数可以做到这一点。
我想到的两种相对简洁的方法是:
julia> df = DataFrame(X = ['A', 'B', 'C'], Y = ["a|b", "a|c", "b|b"])
3×2 DataFrame
? Row ? X ? Y ?
? ? Char ? String ?
???????????????????????
? 1 ? 'A' ? a|b ?
? 2 ? 'B' ? a|c ?
? 3 ? 'C' ? b|b ?
julia> data = split.(df.Y, '|')
3-element Array{Array{SubString{String},1},1}:
["a", "b"]
["a", "c"]
["b", "b"]
julia> foreach(enumerate([:Y1, :Y2])) do (i, n)
df[!, n] = getindex.(data, i)
end
julia> df
3×4 DataFrame
? Row ? X ? Y ? Y1 ? Y2 ?
? ? Char ? String ? SubStrin… ? SubStrin… ?
???????????????????????????????????????????????
? 1 ? 'A' ? a|b ? a ? b ?
? 2 ? 'B' ? a|c ? a ? c ?
? 3 ? 'C' ? b|b ? b ? b ?
Run Code Online (Sandbox Code Playgroud)
或者
julia> df = DataFrame(X = ['A', 'B', 'C'], Y = ["a|b", "a|c", "b|b"])
3×2 DataFrame
? Row ? X ? Y ?
? ? Char ? String ?
???????????????????????
? 1 ? 'A' ? a|b ?
? 2 ? 'B' ? a|c ?
? 3 ? 'C' ? b|b ?
julia> hcat(df, DataFrame(reduce(vcat, permutedims.(split.(df.Y, '|'))), [:Y1, :Y2]))
3×4 DataFrame
? Row ? X ? Y ? Y1 ? Y2 ?
? ? Char ? String ? SubStrin… ? SubStrin… ?
???????????????????????????????????????????????
? 1 ? 'A' ? a|b ? a ? b ?
? 2 ? 'B' ? a|c ? a ? c ?
? 3 ? 'C' ? b|b ? b ? b ?
Run Code Online (Sandbox Code Playgroud)