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”)