df_isin_integer Function

public function df_isin_integer(df, col_index, values) result(mask)

Check if integer values are in a given list

Arguments

Type IntentOptional Attributes Name
type(data_frame), intent(in) :: df
integer, intent(in) :: col_index
integer(kind=ik), intent(in), dimension(:) :: values

Return Value logical, dimension(:), allocatable


Source Code

    function df_isin_integer(df, col_index, values) result(mask)
        type(data_frame), intent(in) :: df
        integer, intent(in) :: col_index
        integer(ik), dimension(:), intent(in) :: values
        logical, dimension(:), allocatable :: mask
        integer(ik), dimension(:), allocatable :: col_data
        integer :: i, j

        if (col_index < 1 .or. col_index > df % ncols()) error stop "column index out of range"
        if (df % dtype(col_index) /= INTEGER_NUM) error stop "column is not integer type"

        col_data = df_get_col_integer(df, col_index)
        allocate (mask(size(col_data)))
        mask = .false.

        do i = 1, size(col_data)
            do j = 1, size(values)
                if (col_data(i) == values(j)) then
                    mask(i) = .true.
                    exit
                end if
            end do
        end do

        deallocate (col_data)
    end function df_isin_integer