Ответ 1
Мы можем использовать формульный метод aggregate
. Переменные в "rhs" of ~
являются переменными группировки, а .
представляет все остальные переменные в 'df1' (из примера мы предполагаем, что нам нужно mean
для всех столбцов, кроме группировки), укажите набор данных и функцию (mean
).
aggregate(.~id1+id2, df1, mean)
Или мы можем использовать summarise_each
из dplyr
после группировки (group_by
)
library(dplyr)
df1 %>%
group_by(id1, id2) %>%
summarise_each(funs(mean))
Или другой вариант - data.table
. Мы преобразуем 'data.frame' в 'data.table' (setDT(df1)
, сгруппированные по 'id1' и 'id2', мы проделываем подмножество data.table(.SD
) и получаем mean
.
library(data.table)
setDT(df1)[, lapply(.SD, mean), by = .(id1, id2)]
данные
df1 <- structure(list(id1 = c("a", "a", "a", "a", "b", "b",
"b", "b"
), id2 = c("x", "x", "y", "y", "x", "y", "x", "y"),
val1 = c(1L,
2L, 3L, 4L, 1L, 4L, 3L, 2L), val2 = c(9L, 4L, 5L, 9L, 7L, 4L,
9L, 8L)), .Names = c("id1", "id2", "val1", "val2"),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8"))