Как превратить цикл в векторный код? - PullRequest
1 голос
/ 09 апреля 2019

Мне нужно разбить фрейм данных на N частей, которые должны иметь заданную длину («проглен»).
Я создал цикл for, который дает мне желаемый результат в виде списка Dataframes. Теперь я хочу изменить цикл на векторный код .

Я не уверен, как преобразовать цикл в векторный код в R.

obslen = 600 ;proglen = 50 ; N = 50 ; testdat <- list()

for (i in 1:N){ 
  test <- df[df$d >= df$d[obslen + i * proglen] &
                    df$d < df$d[proglen + obslen  +i * proglen],]
  testdat[[i]] <- test
}

Переменная $ d имеет тип Posixct. Результат должен содержать N Dataframes. Эти dfs начинаются со дня [obslen + i * proglen] и имеют длину "proglen".

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Если даты различны, вы всегда можете использовать функцию split:

testdat <- split(df[obslen + seq(1, N * proglen), ], rep(seq(N), each = proglen))
0 голосов
/ 09 апреля 2019

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

lapply(1:N, function(idx){
  this_idx <- obslen + idx * proglen
  next_idx <- obslen + (idx + 1) * proglen
  df[this_idx:next_idx, ]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...