以以下示例数据为例:
set.seed(1)
foo <- data.frame(x=rnorm(10, 0, 10), y=rnorm(10, 0, 10), fac = c(rep("A", 5), rep("B", 5)))
Run Code Online (Sandbox Code Playgroud)
我想通过变量“fac”将数据帧“foo”拆分为 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(.))
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误。显然,可以通过拆分数据集、应用函数并将输出添加为一列,然后再将其全部重新组合在一起来手动完成此过程。但是必须有更有效的方法来做到这一点(也许这是对 dplyr 的滥用?)。