Reorder columns in the data frame
Rearranges columns according to the specified order
@param[in,out] df The data frame to modify @param[in] new_order Array specifying the new column order (permutation of 1:ncols)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(data_frame), | intent(inout) | :: | df | |||
| integer, | intent(in), | dimension(:) | :: | new_order |
subroutine df_reorder_columns(df, new_order) type(data_frame), intent(inout) :: df integer, dimension(:), intent(in) :: new_order integer :: i type(data_frame) :: temp_df if (size(new_order) /= df % ncols()) error stop "new_order size must equal number of columns" ! Validate indices do i = 1, size(new_order) if (new_order(i) < 1 .or. new_order(i) > df % ncols()) error stop "invalid column index in new_order" end do ! Create new data frame with reordered columns call temp_df % new(df % get_max_char_len()) do i = 1, df % ncols() select case (df % dtype(new_order(i))) case (REAL_NUM) if (df % get_with_headers()) then call df_append_real(temp_df, df_get_col_real(df, new_order(i)), df % header(new_order(i))) else call df_append_real(temp_df, df_get_col_real(df, new_order(i))) end if case (INTEGER_NUM) if (df % get_with_headers()) then call df_append_integer(temp_df, df_get_col_integer(df, new_order(i)), df % header(new_order(i))) else call df_append_integer(temp_df, df_get_col_integer(df, new_order(i))) end if case (LOGICAL_NUM) if (df % get_with_headers()) then call df_append_logical(temp_df, df_get_col_logical(df, new_order(i)), df % header(new_order(i))) else call df_append_logical(temp_df, df_get_col_logical(df, new_order(i))) end if case (CHARACTER_NUM) if (df % get_with_headers()) then call df_append_character(temp_df, df_get_col_character(df, new_order(i)), df % header(new_order(i))) else call df_append_character(temp_df, df_get_col_character(df, new_order(i))) end if case (COMPLEX_NUM) if (df % get_with_headers()) then call df_append_complex(temp_df, df_get_col_complex(df, new_order(i)), df % header(new_order(i))) else call df_append_complex(temp_df, df_get_col_complex(df, new_order(i))) end if end select end do ! Destroy original and move temp_df data to df call df % destroy() df = temp_df end subroutine df_reorder_columns