多列的中位数以 Start_With 相同的字母开头?

Median for multiple columns start Start_With same letters?

我想根据每列的开头字母计算几列的中位数,创建一个新列。

我知道使用 dplyr 和如下所示的示例来执行此操作的方法:

library(dplyr)
mutate(df, IVMean = rowMeans(select(df, starts_with("IV")), na.rm = TRUE))

但这对于中位数怎么可能呢?

我尝试了很多方法,包括select然后变异但没有运气。

我们可以在转换为matrix

后使用rowMedians
library(matrixStats)
library(dplyr)
mutate(df, IVMedian = rowMedians(as.matrix(select(df, 
         starts_with("IV"))), na.rm = TRUE))

-输出

   IV1 IV2 IV3 col4 IVMedian
1   2   4   1    1        2
2   3   8   3    2        3
3   4   9   4    3        4

或者这可以在 rowwise 中用 c_across

完成
df %>%
    rowwise %>% 
    mutate(IVMedian = median(c_across(starts_with('IV')))) %>% 
    ungroup
# A tibble: 3 x 5
    IV1   IV2   IV3  col4 IVMedian
  <dbl> <dbl> <dbl> <dbl>    <dbl>
1     2     4     1     1        2
2     3     8     3     2        3
3     4     9     4     3        4

或使用pmap(来自purrr

library(purrr)
df %>%
    mutate(IVMedian = pmap_dbl(select(., starts_with('IV')), 
           ~ median(c(...))))
  IV1 IV2 IV3 col4 IVMedian
1   2   4   1    1        2
2   3   8   3    2        3
3   4   9   4    3        4

或在collapse

library(collapse)
df$IVMedian <-  dapply(gvr(df, vars = '^IV'), MARGIN = 1, FUN = fmedian)

数据

df <- data.frame(IV1 = c(2, 3, 4), IV2 = c(4, 8, 9), 
   IV3 = c(1, 3, 4), col4 = c(1, 2, 3))