расщепление по образцам и оперирование ими - PullRequest
0 голосов
/ 27 апреля 2018

Я только начинаю с R, и у меня есть вопрос новичка.

У меня есть следующий фрейм данных (упрощенно):

Time: 00:01:00 00:02:00 00:03:00 00:04:00   ....

Flow: 2          4         5      1         .... 

Я хотел бы знать средний поток каждые две минуты, а не каждую минуту. Мне нужно много часов данных.

Я хочу сохранить эти новые средства в списке. Как я могу сделать это с помощью функции применения?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я предполагаю, что у вас есть непрерывные данные без пропусков со значениями Flow для каждой минуты.

В базе R мы можем использовать aggregate:

df.out <- data.frame(Time = df[seq(0, nrow(df) - 1, 2) + 1, "Time"]);
df.out$mean_2min = aggregate(
    df$Flow,
    by = list(rep(seq(1, nrow(df) / 2), each = 2)),
    FUN = mean)[, 2];
df.out;
#      Time mean_2min
#1 00:01:00         3
#2 00:03:00         3

Объяснение: Извлечь только нечетные строки из df; агрегируйте значения в столбце Flow через каждые 2 строки и сохраняйте среднее значение в столбце mean_2min.


Пример данных

df <- data.frame(
    Time = c("00:01:00", "00:02:00", "00:03:00", "00:04:00"),
    Flow = c(2, 4, 5, 1))
0 голосов
/ 27 апреля 2018

Вы можете создать новую переменную в ваших данных, используя округление вашей переменной времени до ближайших двух минут ниже, а затем использовать табличную функцию данных для вычисления среднего значения для ваших новых минут.

Чтобы точно вам помочь, вам нужно указать, как настроены ваши данные. Если, например, ваши данные настроены так:

dt = data.table(Time = c(0:3), Flow = c(2,4,5,1))

Тогда вам подойдет следующее:

dt[, twomin := floor(Time/2)*2]
dt[, mean(Flow), by = twomin]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...