Julia 如何根据列的值从CSV中筛选数据

Julia 如何根据列的值从CSV中筛选数据,julia,ijulia-notebook,Julia,Ijulia Notebook,我一直在尝试根据数据集上第一列的值过滤100个入口点的数据集,以使用我的数据创建两个单独的变量 这些值是基于零或1进行过滤的,然后我希望存储剩余的数据,而不使用第一列中的零或1。到目前为止,我已经尝试了以下代码,但它似乎工作得不太好 data1 = zeros(50,2) data2 = zeros(50,2) index1 = 0 index2 = 0 for i in 1:100 if data[i,1] < 0.5 data1[index1] =

我一直在尝试根据数据集上第一列的值过滤100个入口点的数据集,以使用我的数据创建两个单独的变量

这些值是基于零或1进行过滤的,然后我希望存储剩余的数据,而不使用第一列中的零或1。到目前为止,我已经尝试了以下代码,但它似乎工作得不太好

data1 = zeros(50,2)
data2 = zeros(50,2)

index1 = 0
index2 = 0

for i in 1:100    
    if data[i,1] < 0.5
        data1[index1] = data[i, 2:3]
        index+=1
    else 
        data2[index2] = data[i, 2:3]
        index2+=1
    end
end
data1=0(50,2)
数据2=零(50,2)
index1=0
index2=0
因为我在1:100
如果数据[i,1]<0.5
数据1[index1]=数据[i,2:3]
指数+=1
其他的
数据2[index2]=数据[i,2:3]
index2+=1
结束
结束
我唯一得到的是这个错误,我无法理解

MethodError: Cannot `convert` an object of type DataFrames.DataFrameRow{DataFrames.DataFrame,DataFrames.SubIndex{DataFrames.Index,UnitRange{Int64},UnitRange{Int64}}} to an object of type Float64
Closest candidates are:
  convert(::Type{T}, !Matched::T) where T<:Number at number.jl:6
  convert(::Type{T}, !Matched::Number) where T<:Number at number.jl:7
  convert(::Type{T}, !Matched::Base.TwicePrecision) where T<:Number at twiceprecision.jl:250
  ...

Stacktrace:
 [1] setindex!(::Array{Float64,2}, ::DataFrames.DataFrameRow{DataFrames.DataFrame,DataFrames.SubIndex{DataFrames.Index,UnitRange{Int64},UnitRange{Int64}}}, ::Int64) at .\array.jl:825
 [2] top-level scope at .\In[47]:9
MethodError:无法将DataFrames.DataFrameRow{DataFrames.DataFrame,DataFrames.SubIndex{DataFrames.Index,UnitRange{Int64},UnitRange{Int64}}类型的对象“转换”为Float64类型的对象
最接近的候选人是:

convert(::Type{T},!Matched::T),其中T让我们利用
DataFrames.jl
中的
groupby
函数,这是
CSV.read
的当前默认值。将来,您可以使用
CSV.File
,然后根据需要将其收集到
数据框
矩阵

# get groups based off the first column
groups = groupby(data, 1)
gcol = groupcol(groups)
# for each group, drop that column and collect into a DataFrame
# could easily collect into a Matrix, too!
data1, data2 = [DataFrame(g[!, Not(gcol)]) for g in groups]

编辑:根据Bogumil的评论,我更新了解决方案,以使用当前的最佳实践

请您发布什么是
数据以及如何在代码中创建数据,好吗?从错误文本看,这似乎是一个
数据帧
,但我们和其他人了解代码发出错误的原因并帮助建议替代解决方案将非常有用。这是一个非常好的答案。我有三点意见
CSV.read
很快就会在CSV.jl中被弃用,所以最好使用
CSV.File(“您的文件名”)|>数据帧
。其次,您不必记住
GroupedDataFrame
中的分组列是什么,因为现在我们提供了
groupcols
valuecols
函数提供了这些信息。最后,我想KeyboardHunter希望在输出中有一个矩阵,这样就可以不用最后一行中的
DataFrame
,而直接编写
matrix