多列的中位数以 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))
我想根据每列的开头字母计算几列的中位数,创建一个新列。
我知道使用 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))