根据条件按组进行突变

时间:2020-01-27 22:04:05

标签: r dplyr mutate

我正在尝试将摘要列添加到数据框。尽管应该对每列应用汇总统计信息,但统计信息本身仅应基于条件行进行计算。

作为示例,给定此数据框:

$log

我想添加一个$null列,但是平均值仅在x <- data.frame(usernum=rep(c(1,2,3,4),each=3), final=rep(c(TRUE,TRUE,FALSE,FALSE)), time=1:12) 时计算。我尝试过:

usernum.mean

但这给出了整体的平均值,而不是用户的平均值。我也尝试过:

final=TRUE

但这只会返回过滤后的数据帧:

library(tidyverse)

x %>% 
  group_by(usernum) %>%
  mutate(user.mean = mean(x$time[x$final==TRUE]))

如何将这些方法应用于每个原始行?

1 个答案:

答案 0 :(得分:2)

如果我们在x$之后使用group_by,它将返回整个列,而不是仅返回该特定组中的值。其次,TRUE/FALSE是逻辑向量,因此我们不需要==

library(dplyr)
x %>%
     group_by(usernum) %>% 
     mutate(user.mean = mean(time[final]))

我们可以使用$的一个选项是.data

x %>% 
    group_by(usernum) %>%
    mutate(user.mean = mean(.data$time[.data$final]))