Возьмем следующие примеры данных:
set.seed(1)
foo <- data.frame(x=rnorm(10, 0, 10), y=rnorm(10, 0, 10), fac = c(rep("A", 5), rep("B", 5)))
Я хочу разделить фрейм данных "foo" с помощью переменной "fac" на A и B, применить функцию (расстояние Махаланобиса), которая возвращает вектордлина каждой подгруппы, а затем измените выход обратно на исходный кадр данных.Например:
auto.mahalanobis <- function(x) {
temp <- x[, c("x", "y")]
return(mahalanobis(temp, center = colMeans(temp, na.rm=T), cov = cov(temp,
use="pairwise.complete.obs")))
}
foo %>% group_by(fac) %>%
mutate(mahal = auto.mahalanobis(.))
Что выдает ошибку.Очевидно, что эту процедуру можно выполнить вручную, разделив набор данных, применив функцию и добавив выходные данные в виде столбца, прежде чем снова собрать все вместе.Но должен быть более эффективный способ сделать это (возможно, это неправильное использование dplyr?).