R语言 汇总时在mutate中使用ifelse

dced5bon  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(199)

我有一个数据框,其中有一个日期列和几个值列(测量浓度)。我正在修改数据框,并使用值的平均值汇总为年份。这样做效果很好:

library(dplyr)    

df <- data.frame(mydate=as.Date(c("2000-01-15", "2000-02-15", "2000-03-15")), columnA=c(2, 4, 5), columnB=c(3, 6, 7))
df_year <- df %>%
        mutate(year = format(mydate, format="%Y")) %>%
        group_by(year) %>%
        summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE)))

上面的代码给出了平均值。是否可以使用ifelse并仅在名称包含“B”的列中使用n-百分位数对df_year进行汇总?也就是说,columnA仍将汇总为平均值,但columnB将汇总为百分位数。
我知道如何计算分位数,但我无法有效地使用ifelse。我不想创建新的 Dataframe ,因为它包含多个列,稍后在绘图时会循环通过这些列。我使用grepl捕获“B”,但得到错误“unused argument”。我正在查找类似以下内容:

mutate...%>%
group_by...%>%
ifelse(grepl("B", each_column_name, fixed=TRUE)==TRUE,
summarise(across(where(is.numeric), ~ quantile(.x, probs=0.9, na.rm = TRUE))),
summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE))))
yeotifhr

yeotifhr1#

across的第一个参数可以合并多种选择方式,包括添加matches("B")

df %>%
  mutate(year = format(mydate, format="%Y")) %>%
  group_by(year) %>%
  summarise(across(matches("B") & where(is.numeric), ~ mean(.x, na.rm = TRUE)))
# # A tibble: 1 × 2
#   year  columnB
#   <chr>   <dbl>
# 1 2000     5.33

相关问题