对Julia使用R-lag

对Julia使用R-lag,julia,Julia,我试图为数据帧中的特定列创建滞后+1正向 我的数据如下: julia> head(df) 6×9 DataFrames.DataFrame. Omitted printing of 1 columns │ Row │ Date │ Open │ High │ Low │ Close │ Adj Close │ Volume │ Close_200sma │ ├─────┼────────────┼─────────┼─────────┼────────

我试图为数据帧中的特定列创建滞后+1正向

我的数据如下:

julia> head(df)
6×9 DataFrames.DataFrame. Omitted printing of 1 columns
│ Row │ Date       │ Open    │ High    │ Low     │ Close   │ Adj Close │ Volume  │ Close_200sma │
├─────┼────────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼──────────────┤
│ 1   │ 1993-02-02 │ 43.9687 │ 43.9687 │ 43.75   │ 43.9375 │ 27.6073   │ 1003200 │ NaN          │
│ 2   │ 1993-02-03 │ 43.9687 │ 44.25   │ 43.9687 │ 44.25   │ 27.8036   │ 480500  │ NaN          │
│ 3   │ 1993-02-04 │ 44.2187 │ 44.375  │ 44.125  │ 44.3437 │ 27.8625   │ 201300  │ NaN          │
│ 4   │ 1993-02-05 │ 44.4062 │ 44.8437 │ 44.375  │ 44.8125 │ 28.1571   │ 529400  │ NaN          │
│ 5   │ 1993-02-08 │ 44.9687 │ 45.0937 │ 44.4687 │ 45.0    │ 28.2749   │ 531500  │ NaN          │
│ 6   │ 1993-02-09 │ 44.9687 │ 45.0625 │ 44.7187 │ 44.9687 │ 28.2552   │ 492100  │ NaN      

│
这是我的滞后尝试,在R中,我可以代表NA,1,然后将其附加到子集合数据的前面。这是我的朱莉娅:

# Lag data +1 forward 
lag = df[1:nrow(df)-1,[:Long]]  # shorten vector by 1 (remove last element)
v = Float64[]
v = vec(convert(Array, lag)) # convert df column to vector
z = fill(NaN, 1) # rep NaN, 1 time (add this to front) to push all forward +1

lags = Float64[]
lags= vec[z; [v]]  # join both arrays z=NA first , make vector same nrow(df)
当我加入NaN和我的数组时,我的长度(滞后)为2。 数据分为两部分:

julia> length(lags[2])
6255
当进入第二部分时,我看到更长的长度

如果我以另一种方式加入,NaN在末尾,数字在前面。我获得了正确的长度:

# try joining other way
    lags_flip = [v; [z]]

 julia> length(lags_flip)
6256
我也可以把它添加回我的数据框中:(底部是Nan,前面是我想要的)

我的问题是当加入Nan和我的数据时,如下所示: 滞后翻转=[v;[z]]

当我以另一种方式进行时,我获得了正确的长度:

首先:

滞后=[z;[v]]

那么它看起来就不正确了

如何通过数据+1向前偏移,在前面放置一个Nan,然后将其添加回我的df?我觉得我很接近,但错过了一些东西

编辑

再想一想,可能在
数据帧
中弄乱列的长度并不是最好的做法,我想你还是想要一个新的列吧。在这种情况下,这可能是一种基本方法:

df[:LagLong] = [missing; df[1:end-1,:Long]]
或者,如果您想要
NaN
(但您可能希望丢失,如下所述):

先前的答复

您可以在以下位置执行此操作:

julia> x = [1.0,2.0,3.0]
3-element Array{Float64,1}:
 1.0
 2.0
 3.0

julia> pop!(unshift!(x, NaN))
3.0

julia> x
3-element Array{Float64,1}:
 NaN
   1.0
   2.0
替换
pop中的
x
!(unshift!(x,NaN))
通过适当的列选择器,如
df[:Long]

然而,请注意,
NaN
在R中不是
NA
,在Julia中
NA
缺失的。现在有一个分支:

  • 如果您的列允许缺少值(它将在
    showcols
    中显示
    Union{missing,[Something]}
    ),那么您可以执行与上述
    pop相同的操作!(取消移位!(df[:Long],缺失))
  • 如果它不允许丢失,您有两个选择。首先是先调用
    allowmissing!(df,:Long)
    以允许遗漏并按上述方式继续。另一种类似于您提出的方法:
    df[:Long]=[missing;df[1:end-1,:Long]]
  • df[:LagLong] = [NaN; df[1:end-1,:Long]]
    
    julia> x = [1.0,2.0,3.0]
    3-element Array{Float64,1}:
     1.0
     2.0
     3.0
    
    julia> pop!(unshift!(x, NaN))
    3.0
    
    julia> x
    3-element Array{Float64,1}:
     NaN
       1.0
       2.0