我在使用 dplyr 软件包执行例程时遇到了一些麻烦。简而言之,我有一个将数据框作为输入并返回单个(数字)值的函数。我希望能够将此功能应用于数据框的多个子集。感觉我应该能够使用group_by()指定数据帧的子集,然后通过管道传递到summary()函数,但是我不确定如何将(子集)数据帧传递给我的函数。 d想申请。
作为一个简化的示例,假设我使用的是 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 %>% filter(Species == "setosa") %>% lm.func(.)
但是我希望能够基于Species将 lm.func 应用于数据的每个子集。我的第一个想法是尝试执行以下操作:
iris %>% group_by(Species) %>% summarize(coef.val = lm.func(.))
即使我知道这行不通,但我的想法是尝试将虹膜的每个子集传递给lm.func函数。
为了澄清起见,我想最后得到一个包含两列的数据框-当数据限制为分组变量。
是否可以通过这种方式使用summary()?
最佳答案
您可以尝试使用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
关于r - dplyr使用数据框功能进行汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29319025/