df_isin_character Function

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

Check if character values are in a given list

Arguments

Type IntentOptional Attributes Name
type(data_frame), intent(in) :: df
integer, intent(in) :: col_index
character(len=*), intent(in), dimension(:) :: values

Return Value logical, dimension(:), allocatable


Source Code

    function df_isin_character(df, col_index, values) result(mask)
        type(data_frame), intent(in) :: df
        integer, intent(in) :: col_index
        character(len=*), dimension(:), intent(in) :: values
        logical, dimension(:), allocatable :: mask
        character(len=:), allocatable :: val
        integer :: i, j

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

        allocate (mask(df % nrows()))
        mask = .false.

        do i = 1, df % nrows()
            val = df_get_val_character(df, i, col_index)
            do j = 1, size(values)
                if (trim(val) == trim(values(j))) then
                    mask(i) = .true.
                    exit
                end if
            end do
            deallocate (val)
        end do
    end function df_isin_character