R 基于条件的按组变异

R 基于条件的按组变异,r,dplyr,mutate,R,Dplyr,Mutate,我正在尝试向数据帧添加摘要列。尽管汇总统计信息应应用于每一列,但统计信息本身应仅基于条件行进行计算 例如,给定此数据帧: x <- data.frame(usernum=rep(c(1,2,3,4),each=3), final=rep(c(TRUE,TRUE,FALSE,FALSE)), time=1:12) # A tibble: 6 x 4 # Groups: usernum [4] usernum final

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

例如,给定此数据帧:

x <- data.frame(usernum=rep(c(1,2,3,4),each=3),
                final=rep(c(TRUE,TRUE,FALSE,FALSE)),
                time=1:12)
# A tibble: 6 x 4
# Groups:   usernum [4]
  usernum final  time user.mean
    <dbl> <lgl> <int>     <dbl>
1       1 TRUE      1       1.5
2       1 TRUE      2       1.5
3       2 TRUE      5       5.5
4       2 TRUE      6       5.5
5       3 TRUE      9       9  
6       4 TRUE     10      10 
但这给出了一个总体平均值,而不是用户。我也尝试过:

x %>% 
  group_by(usernum) %>%
  filter(final==TRUE) %>% 
  mutate(user.mean = mean(time))
但这仅返回过滤后的数据帧:

x <- data.frame(usernum=rep(c(1,2,3,4),each=3),
                final=rep(c(TRUE,TRUE,FALSE,FALSE)),
                time=1:12)
# A tibble: 6 x 4
# Groups:   usernum [4]
  usernum final  time user.mean
    <dbl> <lgl> <int>     <dbl>
1       1 TRUE      1       1.5
2       1 TRUE      2       1.5
3       2 TRUE      5       5.5
4       2 TRUE      6       5.5
5       3 TRUE      9       9  
6       4 TRUE     10      10 
#一个tible:6 x 4
#组:usernum[4]
usernum最终时间user.mean
1真1 1.5
2 1真实2 1.5
3.2正确5.5
4 2真实6 5.5
5 3正确的9 9
6 4真实10 10

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

如果我们在
group\u by
之后使用
x$
,它将返回整个列,而不仅仅是该特定组中的值。其次,
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]))

稍微不那么优雅:
merge(x,aggregate(time~usernum,x[x$final,],mean),by=“usernum”)