我在文本文件中有这样的数据:
CLASS col2 col3 ...
1 ... ... ...
1 ... ... ...
2 ... ... ...
2 ... ... ...
2 ... ... ...
我使用以下代码加载它们:
data = readdlm("file.txt")[2:end, :] # without header line
现在我想从第1类获得只有行的数组。
(如果有帮助,可以使用其他功能加载数据。)
答案 0 :(得分:4)
data[find(x -> a[x,1] == 1, 1:size(data)[1]),:]
答案 1 :(得分:3)
逻辑索引是对数组进行过滤的直接方式:
data[data[:,1] .== 1, :]
但是,如果您将数据作为数据框读取,则可以使用更多选项,它会跟踪您的标题:
julia> using DataFrames
julia> df = readtable("file.txt", separator=' ')
5×4 DataFrames.DataFrame
│ Row │ CLASS │ col2 │ col3 │ _ │
├─────┼───────┼───────┼───────┼───────┤
│ 1 │ 1 │ "..." │ "..." │ "..." │
│ 2 │ 1 │ "..." │ "..." │ "..." │
│ 3 │ 2 │ "..." │ "..." │ "..." │
│ 4 │ 2 │ "..." │ "..." │ "..." │
│ 5 │ 2 │ "..." │ "..." │ "..." │
julia> df[df[:CLASS] .== 1, :] # Refer to the column by its header name
2×4 DataFrames.DataFrame
│ Row │ CLASS │ col2 │ col3 │ _ │
├─────┼───────┼───────┼───────┼───────┤
│ 1 │ 1 │ "..." │ "..." │ "..." │
│ 2 │ 1 │ "..." │ "..." │ "..." │
DataFramesMeta package还有更多可用的工具,旨在使这更简单(其他包正在积极开发中)。您可以使用其@where
宏来执行SQL样式过滤:
julia> using DataFramesMeta
julia> @where(df, :CLASS .== 1)
2×4 DataFrames.DataFrame
│ Row │ CLASS │ col2 │ col3 │ _ │
├─────┼───────┼───────┼───────┼───────┤
│ 1 │ 1 │ "..." │ "..." │ "..." │
│ 2 │ 1 │ "..." │ "..." │ "..." │