У меня большой набор данных из более чем 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 582
amy 592
amy 250
tom 33
tom 10
tom 40
По существу, это будет удалять любые выбросы, которые являются 2SD от каждого уникального значения пользователя. Код будет принимать среднее значение для каждого уникального пользователя, определять его среднее значение и стандартное отклонение, а затем удалять значения, которые> 2SD от среднего значения.
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))
Это то, что я пробовал:
first define average and standard deviation
ave = ave(df$duration)
sd = sd(df$duration)
И затем установить какой-то параметр для этого:
for i in df {
remove all if > 2*sd}
Я не уверен и хотел бы некоторые предложения.