小编TKr*_*aft的帖子

R - 在 dplyr 中使用 group_by() 和 mutate() 来应用返回组长度向量的函数

以以下示例数据为例:

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 的滥用?)。

r dplyr mutate

5
推荐指数
1
解决办法
1243
查看次数

标签 统计

dplyr ×1

mutate ×1

r ×1