сумма матрицы строк и столбцов в R по группам

У меня есть матрица matrix с двумя группами уровней, как показано в именах строк и столбцов.

           UKC1_SS1   UKC1_SS2   UKC2_SS1   UKC2_SS2
UKC1_SS1       1          2          3          4
UKC1_SS2       5          6          7          8
UKC2_SS1       9         10         11         12
UKC2_SS2      13         14         15         16

Я хочу создать таблицу с суммами столбцов и строк на основе первых четырех цифр имен столбцов и строк:

      UKC1   UKC2   
UKC1    14     22  
UKC2    46     54  

Я попытался вычислить rowsums и colSums последовательно,

sum.matrix <- rowsum(matrix, substr(rownames(matrix), start = 1, stop = 4))
sum.matrix <- colSums(sum.matrix, substr(colnames(test), start = 1, stop = 4)

но я получаю следующее сообщение об ошибке: Ошибка в colSums(test, substr(colnames(test), start = 1, stop = 4)) : недопустимый аргумент 'na.rm'

Когда я запускаю sum(is.na), я подтверждаю, что в matrix есть значения NA.


person et_    schedule 08.03.2020    source источник


Ответы (1)


Мы можем сделать sum с xtabs после замены dimnames на substr первых 4 символов.

dimnames(m1) <- lapply(dimnames(m1), substr, 1, 4)
xtabs(Freq~ Var1 + Var2, as.data.frame.table(m1))
#      Var2
#Var1   UKC1 UKC2
#  UKC1   14   22
#  UKC2   46   54

данные

m1 <- structure(c(1L, 5L, 9L, 13L, 2L, 6L, 10L, 14L, 3L, 7L, 11L, 15L, 
4L, 8L, 12L, 16L), .Dim = c(4L, 4L), .Dimnames = list(c("UKC1_SS1", 
"UKC1_SS2", "UKC2_SS1", "UKC2_SS2"), c("UKC1_SS1", "UKC1_SS2", 
 "UKC2_SS1", "UKC2_SS1.1")))
person akrun    schedule 08.03.2020
comment
Спасибо, это работает! Просто добавлю, что в моем вопросе была опечатка, которая теперь исправлена. Имя столбца для 4-го столбца должно быть UKC2_SS2 вместо UKC2_SS1, поэтому нет необходимости называть последний столбец m1 как UKC2_SS1.1. - person et_; 09.03.2020