# How to get the index of the rows with non-NaN values for multiple vectors?

I have 4 vectors of data: A, B, C, D. My goal is to get the index of the rows where all 4 values being non-NaN.

Here is my code:
`Ind1 = intersect.(.!isnan.(A), .!isnan.(B), .!isnan.(C), .!isnan.(D));`

Why doesn’t it work? The results are like the below:
` Vector{Bool}[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]`;

What is the correct way to do this? Many thanks!

Your intersection does actually have the information you want, but it’s slightly weird as you are intersecting several numbers, `Bool`, and numbers are iterable with one element.

There are many other ways, perhaps some easier to read than others:

``````julia> A, B, C = (rand([1,2,NaN],10) for _ in 1:3);

julia> map(A,B,C) do a,b,c
!(isnan(a) | isnan(b) | isnan(c))
end |> findall
3-element Vector{Int64}:
1
3
10

julia> findall(@. !(isnan(A) | isnan(B) | isnan(C)))
3-element Vector{Int64}:
1
3
10

julia> findall(@. !any(isnan, tuple(A,B,C)))
3-element Vector{Int64}:
1
3
10

julia> all(!isnan, hcat(A,B,C); dims=2) |> vec |> findall
3-element Vector{Int64}:
1
3
10

julia> intersect.(.!isnan.(A), .!isnan.(B), .!isnan.(C))
10-element Vector{Vector{Bool}}:
[1]
[]
[1]
[]
[]
[]
[]
[0]
[]
[1]

julia> intersect(true, true, false)
Bool[]

julia> intersect(true, true, true)
1-element Vector{Bool}:
1

julia> intersect(false, false, false)
1-element Vector{Bool}:
0
``````
3 Likes

Many thanks for the multiple solutions. They work well