如何处理 ifelse 函数中的缺失值 julia

Jor*_*des 6 if-statement dataframe julia

我正在使用 Julia,我得到了一个包含 42 个值的数据框,其中缺少 2 个值。

该值是从 0.23 到 0.3 的价格

我正在尝试建立一个新专栏,通过ifelse声明来判断它是否便宜或昂贵。

ifelse 应该去:

df.x_category=ifelse.(df.x .< mean(df.x),"cheap", "expensive")
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

ERROR: TypeError: non-boolean (Missing) used in boolean context
Run Code Online (Sandbox Code Playgroud)

有没有办法跳过那些缺失的值?

我尝试过:

df.x_category=ifelse.(skipmissing(df.x) .< mean(skipmissing(df.x)),"cheap", "expensive")
Run Code Online (Sandbox Code Playgroud)

但出现此错误:

ERROR: ArgumentError: New columns must have the same length as old columns
Run Code Online (Sandbox Code Playgroud)

我不能只是删除缺失的观察结果。

我怎样才能做到这一点?

提前致谢!

Prz*_*fel 4

ifelse只能处理 2 个值,而您需要处理 3 个值。假设您有

df = DataFrame(x=rand([0.23,0.3,missing], 10))
Run Code Online (Sandbox Code Playgroud)

Thanmean(df.x)产生 a,missing因为某些值是missings。你需要做的是 mean(skipmissing(df.x)))

因此代码可以是:

julia> map(x -> ismissing(x) ? missing : ifelse(x,"cheap", "expensive"), df.x .< mean(skipmissing(df.x)))
10-element Vector{Union{Missing, String}}:
 missing
 missing
 "cheap"
 missing
 "expensive"
 missing
 missing
 missing
 "cheap"
 "cheap"
Run Code Online (Sandbox Code Playgroud)

在这里,我将 ifelse 与处理缺失值的方法结合起来,map还有其他方法,但每种方法都需要嵌套一些条件函数。