我想根据其中一列的值创建数据框的子样本。
正如在上一个问题中所讨论的(参见/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/