在不深入应用程序细节的情况下,我需要在数据帧上运行 R 中的 FSA::depletion(function),其中该函数需要迭代运行以找到 X 行的“耗尽”值,然后继续执行对接下来的 X 行运行该操作。数据框看起来像这样:
df <- data.frame(site = c('site1','site1','site1','site2','site2','site2','site3','site3','site3'),
catch = c(30,10,3,40,12,3,10,3,1),
effort = c(600,550,500,800,800,700,400,425,375))
通常,我会运行类似的操作来查找每个站点组上的消耗值:
library(dplyr)
library(FSA)
df %>%
group_by(site) %>%
depletion(catch, effort, method = 'Leslie')
但是,似乎这个函数根本无法与
dplyr
一起使用,因为它不会将“catch”或“effort”识别为来自 df
的向量。该函数似乎只能在使用 dataframe$vector
符号时运行,如下所示:
depletion(df$catch, df$effort, method = 'Leslie')
有人能建议一种方法或解决方法吗?我的下一个想法是添加一个计数列并将整个过程作为 for 循环运行,但这听起来是一个糟糕的过程。
你可以这样做:
library(purrr)
res <- df %>%
nest_by(site) %>%
mutate(d = list(depletion(data$catch, data$effort, method = 'Leslie')))
您仍然需要决定如何解压结果/要保存哪些位:
res$d
是一个列表,如果您查看res$d[[1]]
,您可以看到它是一个包含很多组件的复杂对象。