Merge two dataframes on column names (similar to SQL join but using names)
@param[in] df1 Left dataframe @param[in] df2 Right dataframe @param[in] on_column Name of column to join on @param[in] how Type of join: “inner”, “left”, “right”, “outer” @return Merged dataframe
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(data_frame), | intent(in) | :: | df1 | |||
type(data_frame), | intent(in) | :: | df2 | |||
character(len=*), | intent(in) | :: | on_column | |||
character(len=*), | intent(in) | :: | how |
function df_merge(df1, df2, on_column, how) result(merged_df) type(data_frame), intent(in) :: df1, df2 character(len=*), intent(in) :: on_column, how type(data_frame) :: merged_df integer :: col_idx1, col_idx2 ! Find column indices col_idx1 = df1 % find_header_index(on_column) col_idx2 = df2 % find_header_index(on_column) if (col_idx1 == -1 .or. col_idx2 == -1) then print *, "Error: Column '", trim(on_column), "' not found in one or both dataframes" call merged_df % new() return end if ! Perform appropriate join based on 'how' select case (trim(how)) case ("inner") merged_df = df_inner_join(df1, df2, col_idx1, col_idx2) case ("left") merged_df = df_left_join(df1, df2, col_idx1, col_idx2) case ("right") merged_df = df_right_join(df1, df2, col_idx1, col_idx2) case ("outer") merged_df = df_outer_join(df1, df2, col_idx1, col_idx2) case default print *, "Error: 'how' must be 'inner', 'left', 'right', or 'outer'" call merged_df % new() end select end function df_merge