在 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
的总数(按类型)以及 start
和 finish
之间的平均差(以月为单位)当 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
关于这个有多个相似的问题但不是同一个问题
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
的总数(按类型)以及 start
和 finish
之间的平均差(以月为单位)当 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