У меня большой набор данных из более чем 10000 строк: df:
User duration
amy 582
amy 27
amy 592
amy 16
amy 250
tom 33
tom 10
tom 40
tom 100
Желаемый результат:
User duration
amy 293.4
amy 27
amy 293.4
amy 16
amy 250
tom 33
tom 10
tom 40
tom 45.75
Мы видим здесь все значения, превышающие 1SD от среднего значения для отдельной группы пользователей, были удалены, а затем заменены средним значением (уникального имени пользователя). Среднее значение для группы amy составляет 293,4. Среднее значение для группы составляет: 45,75
dput:
structure(list(User = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L), .Label = c("amy", "tom"), class = "factor"), duration = c(582L,
27L, 592L, 16L, 250L, 33L, 10L, 40L, 100L)), class = "data.frame", row.names = c(NA,
-9L))
Это то, что я пытался, как предложил один из члены здесь, и это работает fantasti c, я не уверен, как на самом деле сейчас ЗАМЕНИТЬ удаленные значения со средним для каждой группы:
df %>%
group_by(User) %>%
filter(between(duration, mean(duration) - 1 * sd(duration),
mean(duration) + 1 * sd(duration)))
Любое предложение приветствуется