Findall/Findfirst across multiple columns in dataframe

julia> function find_in(val, df::AbstractDataFrame)
              for col in eachcol(df)
                  val in col && return true
              end
              return false
              end
find_in (generic function with 1 method)

julia> adf = DataFrame(:asset_id => string.(rand(Int,30)))
30×1 DataFrame
│ Row │ asset_id             │
│     │ String               │
├─────┼──────────────────────┤
│ 1   │ -2736397144903275711 │
│ 2   │ -5009355446030467515 │
│ 3   │ 3016860719257944439  │
│ 4   │ -6219914729618723688 │
│ 5   │ 7089418941294219076  │
│ 6   │ 7798049048074901135  │
│ 7   │ -1184777874901081190 │
│ 8   │ -8988294207548622192 │
│ 9   │ 2489031843846888792  │
│ 10  │ -5616582555900742121 │
│ 11  │ -8129534410659833719 │
│ 12  │ -2412467793492652638 │
│ 13  │ 1833479972888884497  │
│ 14  │ 7275841467256767530  │
│ 15  │ 1407559908209885941  │
│ 16  │ 6768678267236265035  │
│ 17  │ 8222936811673823306  │
│ 18  │ -4546108583101607217 │
│ 19  │ 8378684577093918191  │
│ 20  │ -4237121901420970    │
│ 21  │ 9060470584731928438  │
│ 22  │ -8677251945165029743 │
│ 23  │ 2885065925014277165  │
│ 24  │ -4974471416155912343 │
│ 25  │ -3966713344091129412 │
│ 26  │ -3759254107417327886 │
│ 27  │ -2176385816462454709 │
│ 28  │ 3378276156966501063  │
│ 29  │ 5572543475657793822  │
│ 30  │ -4331938757200166268 │

julia> ProjectData = DataFrame(["Col $i" => string.(zeros(Int,30)) for i in 1:10]);

julia> for a in adf.asset_id
       if a[1]!='-'
       row = rand(1:30); col = "Col $(rand(1:10))"; ProjectData[row , col] = a
       end
       end

julia> ProjectData
30×10 DataFrame. Omitted printing of 3 columns
│ Row │ Col 1               │ Col 2               │ Col 3  │ Col 4               │ Col 5               │ Col 6               │ Col 7  │
│     │ String              │ String              │ String │ String              │ String              │ String              │ String │
├─────┼─────────────────────┼─────────────────────┼────────┼─────────────────────┼─────────────────────┼─────────────────────┼────────┤
│ 1   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 1407559908209885941 │ 0      │
│ 2   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 3   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 4   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 5   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 6   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 7   │ 6768678267236265035 │ 0                   │ 0      │ 3378276156966501063 │ 0                   │ 0                   │ 0      │
│ 8   │ 0                   │ 9060470584731928438 │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 9   │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 10  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 11  │ 7275841467256767530 │ 1833479972888884497 │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 12  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 13  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 7798049048074901135 │ 0      │
│ 14  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 15  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 16  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 17  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 18  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 19  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 20  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 2885065925014277165 │ 0      │
│ 21  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 5572543475657793822 │ 0      │
│ 22  │ 0                   │ 0                   │ 0      │ 3016860719257944439 │ 0                   │ 0                   │ 0      │
│ 23  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 24  │ 0                   │ 0                   │ 0      │ 0                   │ 8378684577093918191 │ 0                   │ 0      │
│ 25  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 26  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 8222936811673823306 │ 0      │
│ 27  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 28  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 29  │ 0                   │ 0                   │ 0      │ 0                   │ 0                   │ 0                   │ 0      │
│ 30  │ 0                   │ 2489031843846888792 │ 0      │ 0                   │ 0                   │ 0                   │ 0      │


julia> transform!(adf, :asset_id => (a->find_in.(a, Ref(ProjectData))) => :inproject)
30×2 DataFrame
│ Row │ asset_id             │ inproject │
│     │ String               │ Bool      │
├─────┼──────────────────────┼───────────┤
│ 1   │ -2736397144903275711 │ 0         │
│ 2   │ -5009355446030467515 │ 0         │
│ 3   │ 3016860719257944439  │ 1         │
│ 4   │ -6219914729618723688 │ 0         │
│ 5   │ 7089418941294219076  │ 1         │
│ 6   │ 7798049048074901135  │ 1         │
│ 7   │ -1184777874901081190 │ 0         │
│ 8   │ -8988294207548622192 │ 0         │
│ 9   │ 2489031843846888792  │ 1         │
│ 10  │ -5616582555900742121 │ 0         │
│ 11  │ -8129534410659833719 │ 0         │
│ 12  │ -2412467793492652638 │ 0         │
│ 13  │ 1833479972888884497  │ 1         │
│ 14  │ 7275841467256767530  │ 1         │
│ 15  │ 1407559908209885941  │ 1         │
│ 16  │ 6768678267236265035  │ 1         │
│ 17  │ 8222936811673823306  │ 1         │
│ 18  │ -4546108583101607217 │ 0         │
│ 19  │ 8378684577093918191  │ 1         │
│ 20  │ -4237121901420970    │ 0         │
│ 21  │ 9060470584731928438  │ 1         │
│ 22  │ -8677251945165029743 │ 0         │
│ 23  │ 2885065925014277165  │ 1         │
│ 24  │ -4974471416155912343 │ 0         │
│ 25  │ -3966713344091129412 │ 0         │
│ 26  │ -3759254107417327886 │ 0         │
│ 27  │ -2176385816462454709 │ 0         │
│ 28  │ 3378276156966501063  │ 1         │
│ 29  │ 5572543475657793822  │ 1         │
│ 30  │ -4331938757200166268 │ 0         │

2 Likes