Образец данных структурирован следующим образом:Вычислить верхние% переменные в соответствии с условием
Individ <- data.frame(Participant = c("Bill", "Bill", "Bill", "Bill", "Bill", "Bill", "Bill", "Bill", "Bill", "Bill", "Bill", "Bill",
"Harry", "Harry", "Harry", "Harry", "Harry", "Harry", "Harry", "Harry", "Harry", "Harry", "Harry", "Harry"),
Time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
Power = c(400, 250, 180, 500, 300, 450, 600, 512, 300, 500, 450, 200, 402, 210, 130, 520, 310, 451, 608, 582, 390, 570, NA, NA))
рассчитать скользящее среднее Power
в течение двух, трех и четырех второго периода. Я знаю, что я могу подмножество каждый скользящего среднего (с учетом изменений в Participant
), выполнив следующие действия:
Individ$TwoSec <- ave(Individ$Power, Individ$Participant,
FUN= function(x) rollapply(x, 2, mean, na.rm = TRUE, fill = NA))
Individ$ThreeSec <- ave(Individ$Power, Individ$Participant,
FUN= function(x) rollapply(x, 3, mean, na.rm = TRUE, fill = NA))
Individ$FourSec <- ave(Individ$Power, Individ$Participant,
FUN= function(x) rollapply(x, 4, mean, na.rm = TRUE, fill = NA))
теперь я хочу, чтобы найти топ 5% Power
для каждого скользящего среднего (TwoSec
, ThreeSec
и FourSec
). Как это сделать, чтобы учесть изменение в Name
и рассчитать это?
My actual data.frame
> 3 миллиона строк, поэтому было бы предпочтительным быстрое решение.
Благодарим Вас за 'data.table' решения для повышения мощности. – user2716568
Это также включает скользящее среднее значение мощности. Я подсчитал, что ОК, я просто хочу перебирать каждую скользящую среднюю колонку (например, Individ $ TwoSec, Individu $ ThreeSec), чтобы найти верхние 5% в каждом, за участника. Можете ли вы отредактировать или добавить ответ, который опускает скользящую среднюю функцию? – user2716568
@ user2716568 Не могли бы вы опубликовать это как новый вопрос? – akrun