Internal: Copy filtered column from source to target
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(data_frame), | intent(in) | :: | source_df | |||
type(data_frame), | intent(inout) | :: | target_df | |||
integer, | intent(in) | :: | col_index | |||
integer, | intent(in), | dimension(:) | :: | selected_rows |
subroutine copy_filtered_column(source_df, target_df, col_index, selected_rows) type(data_frame), intent(in) :: source_df type(data_frame), intent(inout) :: target_df integer, intent(in) :: col_index integer, dimension(:), intent(in) :: selected_rows integer :: i, n_selected real(rk), allocatable :: real_filtered(:) integer(ik), allocatable :: int_filtered(:) logical, allocatable :: logical_filtered(:) character(len=:), allocatable :: char_filtered(:) complex(rk), allocatable :: complex_filtered(:) type(column) :: col n_selected = size(selected_rows) col = source_df % get_data_col(col_index) select case (col % get_type()) case (REAL_NUM) allocate (real_filtered(n_selected)) do i = 1, n_selected real_filtered(i) = col % getr(selected_rows(i)) end do if (source_df % get_with_headers()) then call df_append_real(target_df, real_filtered, source_df % header(col_index)) else call df_append_real(target_df, real_filtered) end if deallocate (real_filtered) case (INTEGER_NUM) allocate (int_filtered(n_selected)) do i = 1, n_selected int_filtered(i) = col % geti(selected_rows(i)) end do if (source_df % get_with_headers()) then call df_append_integer(target_df, int_filtered, source_df % header(col_index)) else call df_append_integer(target_df, int_filtered) end if deallocate (int_filtered) case (LOGICAL_NUM) allocate (logical_filtered(n_selected)) do i = 1, n_selected logical_filtered(i) = col % getl(selected_rows(i)) end do if (source_df % get_with_headers()) then call df_append_logical(target_df, logical_filtered, source_df % header(col_index)) else call df_append_logical(target_df, logical_filtered) end if deallocate (logical_filtered) case (CHARACTER_NUM) allocate (character(len=len(col % getch(1))) :: char_filtered(n_selected)) do i = 1, n_selected char_filtered(i) = col % getch(selected_rows(i)) end do if (source_df % get_with_headers()) then call df_append_character(target_df, char_filtered, source_df % header(col_index)) else call df_append_character(target_df, char_filtered) end if deallocate (char_filtered) case (COMPLEX_NUM) allocate (complex_filtered(n_selected)) do i = 1, n_selected complex_filtered(i) = col % getc(selected_rows(i)) end do if (source_df % get_with_headers()) then call df_append_complex(target_df, complex_filtered, source_df % header(col_index)) else call df_append_complex(target_df, complex_filtered) end if deallocate (complex_filtered) end select end subroutine copy_filtered_column