【问题标题】:Using R lag for Julia为 Julia 使用 R 滞后
【发布时间】:2018-04-06 15:06:29
【问题描述】:

我正在尝试为我的数据框中的特定列创建滞后 +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 在底部,我想要在前面)

# add back to data frame
df[:add] = lags_flip

 1
 1
 1
 1
 1
 1
 1
 1
  [NaN]

我的问题是当加入 Nan 时,我的数据如下: lags_flip = [v; [z]]

我得到正确的长度,当我用另一种方式做时:

南先:

滞后= [z; [v]]

然后它看起来不正确。

如何通过数据 +1 向前偏移,将 Nan 放在前面并添加回我的 df?我觉得我很亲近但缺少一些东西

【问题讨论】:

    标签: julia


    【解决方案1】:

    编辑

    再想一想 - 可能在DataFrame 中弄乱列的长度并不是最好的做法,我假设您无论如何都想要一个新列。在这种情况下,这可能是一种基本方法:

    df[:LagLong] = [missing; df[1:end-1,:Long]]
    

    或者如果你想要NaN(但可能你想要丢失,如下所述):

    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
    

    pop!(unshift!(x, NaN)) 中的x 替换为适当的列选择器,例如df[:Long]

    但是请注意,NaN 在 R 中不是 NA。在 Julia 中,NAmissing。现在有一个分支:

    1. 如果您的列允许缺失值(它将在showcols 中显示Union{Missing, [Something]}),那么您执行与上述pop!(unshift!(df[:Long], missing)) 相同的操作。
    2. 如果它不允许丢失,您有两个选择。首先是先致电allowmissing!(df, :Long) 允许遗漏并如上所述继续前进。另一种与您提出的方法类似:df[:Long] = [missing; df[1:end-1, :Long]]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多