根据列值对数据框进行子集化

问题描述 投票:0回答:1

我正在使用 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).

如有任何帮助,我们将不胜感激。谢谢。

r conditional-statements subset
1个回答
0
投票

你可以用这个,除非我没记错:

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),])
© www.soinside.com 2019 - 2024. All rights reserved.