我需要将数据帧分成N个部分,这些部分应具有给定的长度(“ proglen”)。
我创建了一个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个数据帧。 这些df从[obslen + i * proglen]开始,长度为“ proglen”。
答案 0 :(得分:0)
这几乎与您所做的类似,只是被lapply
所取代,并且更具可读性。这将为您提供数据帧列表。这也可以通过递归函数来完成,但是(我认为)很难理解。
lapply(1:N, function(idx){
this_idx <- obslen + idx * proglen
next_idx <- obslen + (idx + 1) * proglen
df[this_idx:next_idx, ]
})
答案 1 :(得分:0)
如果日期不同,则可以随时使用split
函数:
testdat <- split(df[obslen + seq(1, N * proglen), ], rep(seq(N), each = proglen))