I have A= [2 1;1 2;3 3;2 4;3 5;3 6;1 7;1 8;2 9],
I wanted to get the values in second column when column one have same values, as a separate list.
like— when first column value=1, [2,7,8]
similarly second column value= 2, [1,4,9] using a for loop.
thanks in advance
Something like this?
julia> A[@view(A[:,1]) .== 1, 2]
3-element Vector{Int64}:
2
7
8
julia> A[@view(A[:,1]) .== 2, 2]
3-element Vector{Int64}:
1
4
9
2 Likes
nilshg
3
julia> [x => A[@view(A[:, 1]) .== x, 2] for x ∈ unique(A[:, 1])]
3-element Vector{Pair{Int64, Vector{Int64}}}:
2 => [1, 4, 9]
1 => [2, 7, 8]
3 => [3, 5, 6]
3 Likes
although the description of the request is not entirely clear, I propose a solution in line with the others
A= [2 1;1 2;3 3;2 4;3 5;3 6;1 7;1 8;2 9]
d=Dict{Int, Vector{Int}}()
for r in axes(A,1)
push!(get!(()->[],d, A[r,1]),A[r,2])
end
d
or
foreach(r->push!(get!(()->[],d, A[r,1]),A[r,2]),axes(A,1))
reduce((d,r)->merge(d, Dict(A[r,1]=>[get!(()->[],d, A[r,1]);[A[r,2]]])),axes(A,1), init=Dict{Int, Vector{Int}}())
A suggested small tweak to Nils’ code above:
A = [2 1; 1 2; 3 3; 2 4; 3 5; 3 6; 1 7; 1 8; 2 9]
d = @views Dict(x => A[A[:,1] .== x, 2] for x ∈ unique(A[:,1]))
# then we can do:
d[1], d[2], d[3]
1 Like