Forum Discussion

stevedep's avatar
stevedep
Memorable Member
5 years ago
Solved

select values from list based on bolean array / list

Hi,

 

I am trying to select values from a list where my bolean (true/false) list would indicate to select the column. 

 

Something like. 

 

List.Select(datalist, listwithtruefalsevalues)

 

Quite common in R and other languages, you select rows from you dataframe based on an array of true/false values. 

 

Hope its clear.

 

Kind regards, Steve. 

 

edhans , ImkeF 

  • stevedep 

     

    See if this help

    let
        DataList= {1,2,3,4,5},
       Listwithtruefalse = {true,false,true,true,false},
    Mergedlist=List.Zip({DataList,Listwithtruefalse }),
    
      Desiredlist = List.Transform(
    List.Select(Mergedlist, (d)=>d{1}=true),(d)=>d{0})
    in
        Desiredlist
  • stevedep Zubair_Muhammad 

    since you have 2 lists of the same lengths, why not use subscript to pick up responding values like this,

     

    let
        DataList= {1,2,3,4,5},
        Listwithtruefalse = {true,false,true,true,false},
        Desiredlist = List.Accumulate({0..List.Count(Listwithtruefalse)-1}, {}, (s,c)=>if Listwithtruefalse{c} then s&{DataList{c}} else s)
    in
        Desiredlist

     

3 Replies

  • Zubair_Muhammad's avatar
    Zubair_Muhammad
    Community Champion

    stevedep 

     

    See if this help

    let
        DataList= {1,2,3,4,5},
       Listwithtruefalse = {true,false,true,true,false},
    Mergedlist=List.Zip({DataList,Listwithtruefalse }),
    
      Desiredlist = List.Transform(
    List.Select(Mergedlist, (d)=>d{1}=true),(d)=>d{0})
    in
        Desiredlist
    • stevedep's avatar
      stevedep
      Memorable Member

      Thanks, I found a way to do it, turns out, it's the same approach as you suggest. So it probably makes sense 😃

      • CNENFRNL's avatar
        CNENFRNL
        Community Champion

        stevedep Zubair_Muhammad 

        since you have 2 lists of the same lengths, why not use subscript to pick up responding values like this,

         

        let
            DataList= {1,2,3,4,5},
            Listwithtruefalse = {true,false,true,true,false},
            Desiredlist = List.Accumulate({0..List.Count(Listwithtruefalse)-1}, {}, (s,c)=>if Listwithtruefalse{c} then s&{DataList{c}} else s)
        in
            Desiredlist