dplyr使用数据帧的功能进行汇总

Mar*_*son 8 group-by r dplyr

我在使用dplyr包执行例程时遇到了一些麻烦.简而言之,我有一个函数,它将数据帧作为输入,并返回一个(数字)值; 我希望能够将此函数应用于数据帧的多个子集.感觉我应该能够使用group_by()指定数据帧的子集,然后传递给summarize()函数,但我不确定如何将(子集化的)数据帧传递给函数I'我想申请.

作为一个简化的例子,假设我正在使用iris数据集,并且我有一个相当简单的函数,我想将其应用于数据的几个子集:

data(iris)
lm.func = function(.data){
  lm.fit = lm(Petal.Width ~ Petal.Length, data = .data)
  out = summary(lm.fit)$coefficients[2,1]
  return(out)
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够根据其他变量(如Species)将此函数应用于虹膜子集.我能够手动过滤数据,然后管道到我的功能,例如:

iris %>% filter(Species == "setosa") %>% lm.func(.)
Run Code Online (Sandbox Code Playgroud)

但我希望能够 基于Species 将lm.func应用于数据的每个子集.我的第一个想法是尝试类似以下内容:

iris %>% group_by(Species) %>% summarize(coef.val = lm.func(.))
Run Code Online (Sandbox Code Playgroud)

即使我知道这不起作用,我的想法是尝试将每个虹膜子集传递给lm.func函数.

为了澄清,我想最终得到一个包含两列的数据帧 - 第一列是每个级别的分组变量,第二列是lm.func的输出,当数据被限制为分组指定的子集时变量.

是否可以以这种方式使用summarize()?

akr*_*run 12

你可以试试 do

 iris %>% 
      group_by(Species) %>%
      do(data.frame(coef.val=lm.func(.)))
 #     Species  coef.val
 #1     setosa 0.2012451
 #2 versicolor 0.3310536
 #3  virginica 0.1602970
Run Code Online (Sandbox Code Playgroud)