Мне нужно разделить фрейм данных на N частей, которые должны иметь заданную длину («проглен»). Я создал цикл for, который дает мне желаемый результат в виде списка кадров данных. Теперь я хочу изменить цикл for для векторного кода.
Я не уверен, как преобразовать цикл в векторный код в 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 кадров данных. Эти dfs начинаются с дня [obslen + i * proglen] и имеют длину «proglen».
Возможно, использование split()
в базе разумно. sp <- ceiling(seq(nrow(df)) / proglen); split(df, sp)
Это почти похоже на то, что вы сделали, только заменено на lapply
и немного более читабельно. Это даст вам список фреймов данных. Это также можно сделать с помощью рекурсивной функции, но это будет трудно понять (на мой взгляд).
lapply(1:N, function(idx){
this_idx <- obslen + idx * proglen
next_idx <- obslen + (idx + 1) * proglen
df[this_idx:next_idx, ]
})
Если даты различаются, вы всегда можете использовать функцию split
:
testdat <- split(df[obslen + seq(1, N * proglen), ], rep(seq(N), each = proglen))
Привет и добро пожаловать в SO. Не могли бы вы предоставить образец вашего фрейма данных, например. с
dput()
.