def _get_mobility_factor_counts_for_reasonable_r(results, method, lower_R=0.5, upper_R=1.5):
    """
    Returns the count of mobility factors for which method resulted in an R value between `lower_R` and `upper_R`.

    Args:
        results (pd.DataFrame): Dataframe with rows as methods and corresponding simulation metrics.
        method (str): name of the intervention method for which range is to be found
        lower_R (float): a valid lower value of R
        upper_R (float): a valid upper value of R

    Returns:
        (pd.Series): A series where each row is a mobility factor and corresponding number of simulations that resulted in valid R.
    """
    selector = results['method'] == method
    correct_R = (lower_R <= results[selector]['r']) & (results[selector]['r'] <= upper_R)
    return results[selector][correct_R][['mobility_factor']].value_counts()