在dplyr的汇总函数中过滤

drm*_*iod 10 r dplyr

我正在苦苦挣扎,dplyr因为我想在一个人做两件事,并想知道是否有可能.

我想计算值的平均值,同时计算在另一列中具有特定值的值的平均值.

library(dplyr)
set.seed(1234)
df <- data.frame(id=rep(1:10, each=14),
                 tp=letters[1:14],
                 value_type=sample(LETTERS[1:3], 140, replace=TRUE),
                 values=runif(140))

df %>%
  group_by(id, tp) %>%
  summarise(
    all_mean=mean(values),
    A_mean=mean(values), # Only the values with value_type A
    value_count=sum(value_type == 'A')
  )
Run Code Online (Sandbox Code Playgroud)

所以A_mean列应计算的平均values哪里value_count == 'A'.

我通常会做两个单独的命令并稍后合并结果,但我想有一个更方便的方式,我只是不明白.

提前致谢.

akr*_*run 16

我们可以尝试

 df %>%
     group_by(id, tp) %>%
     summarise(all_mean = mean(values), 
                A_mean = mean(values[value_type=="A"]),
                value_count=sum(value_type == 'A'))
Run Code Online (Sandbox Code Playgroud)

  • 警告:如果您没有明确过滤掉 NA,它们将被包含在内,因为 R 讨厌您。`A_mean = Mean(values[value_type=="A" &amp; !is.na(value_type)])`。在您的过滤器变量可能包含您不希望计算的 NA 的任何地方都包含此内容。 (2认同)
  • 或者更简单:“drop_na(value_type) %&gt;%”位于管道链的顶部。 (2认同)