首页 > 解决方案 > 用另一个df的间隔改变df中的中位数

问题描述

我正在寻找一种方法来计算具有来自另一个数据帧的间隔的 df 中的中位数。

例子:

df_a <- tibble(values = c (1:30))
df_b <- tibble(lower_limit = c(1, 5, 11, 19),
               upper_limit = c(3, 9, 17, 27))

现在我想改变一个名为“median”的向量,它根据 中的间隔限制df_b从数据中计算中值,我该怎么做?问候!df_adf_b

标签: rdplyrtidyverse

解决方案


我们可以使用map2frompurrr从 'df_a' 中提取 'values' 列,between该范围为每个对应的范围列值,然后获取median并创建一个新列

library(dplyr)
library(purrr)
df_b %>%
    mutate(median = map2_dbl(lower_limit, upper_limit, 
            ~ median(df_a$values[between(df_a$values, .x, .y)])))

-输出

# A tibble: 4 x 3
  lower_limit upper_limit median
        <dbl>       <dbl>  <dbl>
1           1           3      2
2           5           9      7
3          11          17     14
4          19          27     23

或与rowwise

df_b %>%
    rowwise %>%
    mutate(median =  df_a %>% 
       filter(between(values, lower_limit, upper_limit)) %>% 
       summarise(values = median(values)) %>% 
       pull(values)) %>% 
    ungroup

-输出

# A tibble: 4 x 3
  lower_limit upper_limit median
        <dbl>       <dbl>  <int>
1           1           3      2
2           5           9      7
3          11          17     14
4          19          27     23

推荐阅读