Я пытаюсь добавить сводный столбец в фрейм данных. Хотя суммарная статистика c должна быть применена к каждому столбцу, сама статистика c должна рассчитываться только на основе условных строк.
В качестве примера, приведенного для этого кадра данных:
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]))
, но это дает общее среднее значение, а не по пользователю. Я также попытался:
x %>%
group_by(usernum) %>%
filter(final==TRUE) %>%
mutate(user.mean = mean(time))
, но при этом возвращается только отфильтрованный фрейм данных:
# 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
Как применить эти средства к каждой исходной строке?