Luc*_*cas 4 missing-data dataframe julia
我正在尝试根据来自其他(数字)列的值范围创建一个分类变量。但是,当我missings在数字列中时,代码不起作用
这是一个可复制的示例:
using RDatasets;
using DataFrames;
using Pipe;
using FreqTables;
df = dataset("datasets","iris")
#lowercase columns just for convenience
@pipe df |> rename!(_, [lowercase(k) for k in names(df)]);
#without this line, the code works fine
@pipe df |> allowmissing!(_, :sepallength) |> replace!(_.sepallength, 4.9 => missing);
df[:size] = @. ifelse(df[:sepallength]<=4.7, "small", missing)
df[:size] = @. ifelse((df[:sepallength]>4.7) & (df[:sepallength]<=4.9), "avg", df[:size])
df[:size] = @. ifelse((df[:sepallength]>4.9) & (df[:sepallength]<=5), "large", df[:size])
df[:size] = @. ifelse(df[:sepallength]>5, "huge", df[:size])
println(@pipe df |> freqtable(_, :size))
Run Code Online (Sandbox Code Playgroud)
输出:
TypeError: non-boolean (Missing) used in boolean context
Run Code Online (Sandbox Code Playgroud)
我想忽略数值变量中的缺失情况,但我不能只删除缺失值,因为这会删除数据集中的其他重要信息。此外,如果我只删除sepallength列中的缺失内容,则df[:size]长度将与原始dataframe.
coalesce像这样使用函数:
julia> x = [1,2,3,missing,5,6,7]
7-element Array{Union{Missing, Int64},1}:
1
2
3
missing
5
6
7
julia> @. ifelse(coalesce(x < 4.7, false), "small", missing)
7-element Array{Union{Missing, String},1}:
"small"
"small"
"small"
missing
missing
missing
missing
Run Code Online (Sandbox Code Playgroud)
作为一个侧面说明不写df[:size](这句法已经现在已经过时了2年多,很快就会报错),而是df.size或df."size"访问的数据帧的列(df."size"是情况下,当列名包含如空格字符等。 ,例如 df.“我的奇葩专栏!”)。
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |