Dataframe 基于Julia数据帧中的多个条件选择列

Dataframe 基于Julia数据帧中的多个条件选择列,dataframe,filter,julia,criteria,Dataframe,Filter,Julia,Criteria,我需要根据来自数组的多个条件从Julia数据帧中的单个列中选择值。上下文:我试图格式化来自大型Julia数据帧的数据,以支持PCA主成分分析,因此我首先将原始数据拆分为分析矩阵和标签数组。这是我的代码,到目前为止不起作用: ### Initialize source dataframe for PCA dfSource=DataFrame( colDataX=[0,5,10,15,5,20,0,5,10,30], colDataY=[1,2,3,4,5,6,7,8,9,0],

我需要根据来自数组的多个条件从Julia数据帧中的单个列中选择值。上下文:我试图格式化来自大型Julia数据帧的数据,以支持PCA主成分分析,因此我首先将原始数据拆分为分析矩阵和标签数组。这是我的代码,到目前为止不起作用:

### Initialize source dataframe for PCA
dfSource=DataFrame(
    colDataX=[0,5,10,15,5,20,0,5,10,30],
    colDataY=[1,2,3,4,5,6,7,8,9,0],
    colRowLabels=[0.2,0.3,0.5,0.6,0.0,0.1,0.2,0.1,0.8,0.0])
### Extract 1/2 of rows into analytical matrix
matSource=convert(Matrix,DataFrame(dfSource[1:2:end,1:2]))'
###  Extract last column as labels
arLabels=dfSource[1:2:end,3]
###  Select filtered rows
datGet=matSource[:,arLabels>=0.2 & arLabels<0.7][1,:]
print(datGet)
输出>方法错误:没有方法匹配

在printdatGet语句之前的最后一行,我得到一个MethodError,它指示与使用&logic相关的方法不匹配。我做错了什么?

此代码有效:

dfSource=DataFrame(
    colDataX=[0,5,10,15,5,20,0,5,10,30],
    colDataY=[1,2,3,4,5,6,7,8,9,0],
    colRowLabels=[0.2,0.3,0.5,0.6,0.0,0.1,0.2,0.1,0.8,0.0])

matSource=convert(Matrix,DataFrame(dfSource[1:2:end,1:2]))'

arLabels=dfSource[1:2:end,3]

datGet=matSource[:,(arLabels.>=0.2) .& (arLabels.<0.7)][1,:]
print(datGet)
输出>[0,10,0]


请注意插入式附件arLabels.>=0.2和arLabels=and的使用。一个替代实现的小示例,您可能会发现了解DataFrames.jl的内置功能非常有用:

# avoid materialization if dfSource is large
dfSourceHalf = @view dfSource[1:2:end, :]
lazyFilter = Iterators.filter(row -> 0.2 <= row[3] < 0.7, eachrow(dfSourceHalf))
matFiltered = mapreduce(row -> collect(row[1:2]), hcat, lazyFilter)
matFiltered[1, :]

这并不是为了速度而优化,而是为了展示可能的情况,但它已经比代码快了好几倍了

Julia支持链式比较,比如0.2。添加得不错。谢谢