Dataframe Julia数据帧用LOCF填充NA
有没有快速的方法将数据帧的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)])] 那么 以及 我写道: 虽然可能需要根据
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)]