dataframe - 将 Symbol 参数传递给 @where 以使用 Julia 选择 DataFrame 的行

标签 dataframe julia

我想根据其中一列的值创建数据框的子样本。

正如在上一个问题中所讨论的(参见/questions/58220143/julia-dataframe-select-rows-based-values-of-one-column-belonging-to-a-set),我可以使用以下语法:

using DataFrames, DataFramesMeta
DT = DataFrame(ID = [1, 1, 2,2,3,3, 4,4], x1 = rand(8))

@where(DT, in([1,4]).(:ID))

现在,如果我开发一个函数,我们将其称为 subsampleDF,其中参数 varID 是对应于进行选择的变量的符号。

function subsampleDF( data::DataFrame, varID::Symbol,subs::Vector{Int})
    d = @where(data, in(subs).(varID))
end

subsampleDF(DT, :ID,  [1,4])

然后我得到以下错误。我不确定为什么它是错误的,因为 varID 实际上等于 :ID ?

> ArgumentError: invalid row index of type Bool

Stacktrace:
 [1] Type at C:\Users\djourdain\.julia\packages\DataFrames\yH0f6\src\dataframerow\dataframerow.jl:60 [inlined]
 [2] getindex at C:\Users\djourdain\.julia\packages\DataFrames\yH0f6\src\dataframerow\dataframerow.jl:93 [inlined]
 [3] where(::DataFrame, ::getfield(Main, Symbol("##10#11")){Symbol,Array{Int64,1}}) at C:\Users\djourdain\.julia\packages\DataFramesMeta\c88dH\src\DataFramesMeta.jl:186
 [4] subsampleDF(::DataFrame, ::Symbol, ::Array{Int64,1}) at .\In[8]:2
 [5] top-level scope at In[9]:1

谢谢。

达米安

最佳答案

在 DataFramesMeta.jl 中,使用 cols 来引用使用表达式的列。所以定义函数的正确方法是:

function subsampleDF( data::DataFrame, varID::Symbol,subs::Vector{Int})
    @where(data, in(subs).(cols(varID)))
end

关于dataframe - 将 Symbol 参数传递给 @where 以使用 Julia 选择 DataFrame 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269701/

相关文章:

file-io - 如何在Julia中逐行读取文件?

julia - 在 Julia 中实现多元牛顿法

python - 如何根据数据框和 numpy 中的协变量对观察结果进行分类?

python - 如何使用pandas.Series.dt.strftime可以做每小时映射?

python - Pandas Dataframe 集类别 - pandas.Categorical.set_categories 中的 `inplace` 参数已弃用

dataframe - Julia:CSV.write 内存效率很低?

julia - 在牛虻图表中操作标签 Julia

具有多个条件的 Julia 子集数据框

python - 从 DataFrame 列中提取特定字符/文本

python - 如何用饼图绘制分类变量