我正在使用 for 循环处理多个数据帧。在每个数据帧中,都有一个名为
utc
的变量,它可以是 0、1、2 或 3。如果 utc
是 1,那么我需要对行 2:8 进行子集化。如果 utc
是 2,那么我需要对第 3:9 行进行子集化(依此类推)。变量 utc
是每个单独数据帧中的常数。
可重现的数据:
structure(list(lai_lv = c(3.6352286643901, 3.64098631754469,
3.64098631754469, 3.64098631754469, 3.64098631754469, 3.64098631754469,
3.64098631754469, 3.64098631754469, 3.64098631754469, 3.64098631754469
), lai_hv = c(2.43529312827423, 2.43624785398554, 2.43624785398554,
2.43624785398554, 2.43624785398554, 2.43624785398554, 2.43624785398554,
2.43624785398554, 2.43624785398554, 2.43624785398554), d2m = c(298.379793852221,
298.353981989364, 298.351944210717, 298.305754561395, 298.217450820042,
298.238507866057, 298.326811607409, 298.34447235568, 297.835706953582,
297.798347678394), utc = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), row.names = c(NA,
10L), class = "data.frame")
我尝试使用
case_when
来完成这个任务:
case_when(data$utc == 1 ~ slice(data, 2:8))
但是出现了以下错误:
Error in `case_when()`:
! Can't recycle `..1 (left)` (size 10) to match `..1 (right)` (size 7).
如有任何帮助,我们将不胜感激。谢谢。
你可以用这个,除非我没记错:
df[(df$utc[1]+1):(df$utc[1]+24),]
什么时候
df$utc[1]
= 1,从第 2 行到第 25 行,依此类推。
如果有很多数据框,你可以这样做:
dfs <- list(df) # put all of the dataframes in here
map(dfs, ~ .x[(.x$utc[1]+1):(.x$utc[1]+24),])