Dataframe Julia数据帧用LOCF填充NA

Dataframe Julia数据帧用LOCF填充NA,dataframe,julia,Dataframe,Julia,有没有快速的方法将数据帧的NA值转换为最后观察到的值 using DataFrames d = @data [1,NA,5,NA,NA] df = DataFrame(d=d) result = filled_with_locf(df) expected = [1,1,5,5,5] LOCF=结转的最后观察值 如果我们将locf定义为: locf(v) = v[cummax([i*!isna(v[i]) for i=1:length(v)])] 那么 以及 我写道: 虽然可能需要根据

有没有快速的方法将数据帧的NA值转换为最后观察到的值

using DataFrames

d = @data [1,NA,5,NA,NA]
df = DataFrame(d=d)

result = filled_with_locf(df)

expected = [1,1,5,5,5]
  • LOCF=结转的最后观察值

    • 如果我们将
      locf
      定义为:

      locf(v) = v[cummax([i*!isna(v[i]) for i=1:length(v)])]
      
      那么

      以及

      我写道:

      虽然可能需要根据您的具体情况对其进行调整,但这也应该有效。这只考虑数组中的正数

      function locf(x::Array{Float64})
      dx = zeros(x)
      for i in 2:length(x)-1
          if x[i+1] > 0 && x[i] == 0.0
              dx[i+1] = x[i+1]
          end
              if dx[i] == 0 
                  dx[i] = dx[i-1]
              end
          end
          return dx
      end
      
          na_locf = locf(dummy_array)
      

      若要避免缺少列的第一个值时出现BoundersError,请在累积函数调用中使用init=1

      locf(v) = v[accumulate(max, [i* !(ismissing(v[i])|isnan(v[i])) for i in 1:length(v)], init = 1)]
      

      result=d[cummax([i*!isna(d[i]),对于i=1:length(d)]]]
      isna函数是在哪里定义的?@xgdgsc这是用于较旧版本的数据帧的。如果新的
      NA
      无法在julia 1.3.1中找到cummax,则当前
      ismissing
      可能会接受该工作。最后使用了
      累积
      <代码>locf(v)=v[累计(最大值,[i*!ismissing(v[i]),对于i=1:长度(v)])]
      function locf(x::Array{Float64})
      dx = zeros(x)
      for i in 2:length(x)-1
          if x[i+1] > 0 && x[i] == 0.0
              dx[i+1] = x[i+1]
          end
              if dx[i] == 0 
                  dx[i] = dx[i-1]
              end
          end
          return dx
      end
      
          na_locf = locf(dummy_array)
      
      locf(v) = v[accumulate(max, [i* !(ismissing(v[i])|isnan(v[i])) for i in 1:length(v)], init = 1)]