在 dplyr::summarise 内进行子集化或过滤

Subsetting or filtering within dplyr::summarise

关于这个有多个相似的问题但不是同一个问题

MWE:

library(dplyr)
library(lubridate)

df= data.frame(id = c(1:5),
               type = c("a", "b", "b", "a", "b"),
               start = dmy(c("05/05/2005","06/06/2006", "07/07/2007", "08/08/2008", "09/09/2009")),
               finish = dmy(c("08/08/2008", "09/09/2009","02/02/2011","02/02/2011", NA)),
               not_used = c(F,T,F,T,F))

我想生成一个摘要,按 type 分组,包括 not_used 的总数(按类型)以及 startfinish 之间的平均差(以月为单位)当 not_used 为假时。这就是我正在尝试的方式:

df%>%group_by(type)%>%
  summarise(Not_used =  sum(not_used),
            `Mean_Lifespan_of_used(months)` = mean((interval(start,finish)/months(1), na.rm= T)[not_used == F]))

有了这个我得到 unexpected token ',',导致错误:

Error: unexpected ',' in:
"  summarise(Not_used =  sum(not_used),
            `Mean_Lifespan_of_used(months)` = mean((interval(start,finish)/months(1),"

我很感激我可以在汇总函数之前创建一个新列,但我想了解我在这里做错了什么。

输入数据 as.Date 需要 format = "%d/%m/%Y" 然后在执行 mean 之前对输出进行子集化(因为 mean returns 是单个值,而 not_used长度不同)

library(dplyr)
library(lubridate)
df%>%
   group_by(type)%>%
  summarise(Not_used =  sum(not_used),  
   `Mean_Lifespan_of_used(months)` = mean((interval(start, 
         finish)/months(1))[not_used == FALSE], na.rm = TRUE))

-输出

# A tibble: 2 × 3
  type  Not_used `Mean_Lifespan_of_used(months)`
  <chr>    <int>                           <dbl>
1 a            1                            39.1
2 b            1                            42.8