让 FSA 函数“Depletion”与 dplyr 一起使用时出现问题

问题描述 投票:0回答:1

在不深入应用程序细节的情况下,我需要在数据帧上运行 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 循环运行,但这听起来是一个糟糕的过程。

r dataframe dplyr
1个回答
0
投票

你可以这样做:

library(purrr)
res <- df %>%
    nest_by(site) %>%
    mutate(d = list(depletion(data$catch, data$effort, method = 'Leslie')))

您仍然需要决定如何解压结果/要保存哪些位:

res$d
是一个列表,如果您查看
res$d[[1]]
,您可以看到它是一个包含很多组件的复杂对象。

© www.soinside.com 2019 - 2024. All rights reserved.