Мы можем использовать split.default
, чтобы разделить столбцы на основе общих имен столбцов, а затем взять rowMeans
каждого списка.
sapply(split.default(data.frame(x), sub("var(.)\\d+", "\\1",colnames(x))), rowMeans)
# a b c d e
#[1,] 8.0 8.5 4.0 1.0 7.5
#[2,] 6.0 9.0 6.0 4.5 7.0
#[3,] 7.5 9.0 6.0 2.5 8.0
#[4,] 7.5 5.5 3.5 3.5 6.0
, где
sub("var(.)\\d+", "\\1",colnames(x)) #returns
#[1] "a" "a" "b" "b" "c" "c" "d" "d" "e" "e"
data
Предполагается, что x
является матрицей.
x <- structure(c(7L, 3L, 7L, 5L, 9L, 9L, 8L, 10L, 9L, 9L, 10L, 7L,
8L, 9L, 8L, 4L, 3L, 6L, 7L, 6L, 5L, 6L, 5L, 1L, 1L, 8L, 2L, 6L,
1L, 1L, 3L, 1L, 7L, 9L, 9L, 9L, 8L, 5L, 7L, 3L), .Dim = c(4L,
10L), .Dimnames = list(NULL, c("vara1", "vara2", "varb1", "varb2",
"varc1", "varc2", "vard1", "vard2", "vare1", "vare2")))