Julia 变异前导变量

Julia 变异前导变量,julia,Julia,这是我的代码: data = @pipe data |> sort(_, :year) |> groupby(_,:id) |> transform(_, :a1 => (x -> lead(x,1) .- x ) => :b1; ungroup = false) |> transform(_, :a2 => (x -> lead(x,2) .- x ) => :b2; ungroup = false) |> transf

这是我的代码:

data = @pipe data |> sort(_, :year) |> groupby(_,:id) |> 
 transform(_, :a1 => (x -> lead(x,1) .- x ) => :b1; ungroup = false) |>
 transform(_, :a2 => (x -> lead(x,2) .- x ) => :b2; ungroup = false) |>
 transform(_, :a3 => (x -> lead(x,3) .- x ) => :b3, ungroup = false) |>
 transform(_, :a4 => (x -> lead(x,4) .- x ) => :b4, ungroup = false) |>
 transform(_, :a5 => (x -> lead(x,5) .- x ) => :b5)
这是在非常大的数据集上变异前导变量的最有效方法吗

data
是一个包含列
a1
,…,
:a5
,我想要列
b1
,…,
:b5
,其中
bi=lead(ai,I)
,关于“最有效”的问题有很多维度,但我假设您希望尽可能避免分配,在这种情况下,请执行以下操作:

@pipe data |>
      sort!(_, :year) |>
      groupby(_,:id) |> 
      transform!(_, [Symbol(:a, i) => (x -> lead(x, i) .- x ) => Symbol(:b, i) for i in 1:5])

通过这种方式,您将更新您的
数据
数据框,从而最大限度地减少复制(您的解决方案复制了很多)。

太好了,我的意思是尽可能减少分配。