我在使用dplyr包执行例行程序时遇到了一些问题。简而言之,我有一个函数,它以数据框作为输入,并返回单个(数值)值; 我想能够将此函数应用于数据框的几个子集。感觉我应该能够使用group_by()来指定数据框的子集,然后通过管道传递到summarize()函数,但我不知道如何将(子集)数据框传递到我想要应用的函数。
以简化的例子为例,假设我正在使用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)
}
现在,我希望能够将此函数应用于基于其他变量(如“Species”)的 iris 子集。例如,我可以手动过滤数据,然后将其传递到我的函数中:
iris %>% filter(Species == "setosa") %>% lm.func(.)
但我希望能够基于物种将 lm.func 应用于数据的 每个 子集。 我最初的想法是尝试以下内容:
iris %>% group_by(Species) %>% summarize(coef.val = lm.func(.))
即使我知道这样做行不通,我的想法是尝试将每个鸢尾花子集传递给lm.func函数。为了澄清,我希望得到一个包含两列的数据框——第一列是分组变量的每个水平,第二列是lm.func的输出结果,当数据被限制在由分组变量指定的子集中时。使用summarize()可以这样吗?