将函数应用于分组的数据框R

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

我正在尝试按组划分数据框,然后应用一个函数,该函数将创建多个单独的列表或数据框。

例如,将下面的数据按ID拆分,然后为每60天创建一个单独的列表或数据框。

id <- rep(1:5, each = 365)
date <- rep(seq(as.Date('2019-01-01'), as.Date('2019-12-31'), 'day'), 5)
x <- rnorm(1825)
y <- rnorm(1825)

df <- data.frame(id, date, x, y) 

我已经尝试将group_split或split与seq.int结合使用,并且我可以使用此功能仅使用1个id进行工作

df2 <- df %>% 
  filter(id == 1)

data <- list()

data <- lapply(
  seq(1,length(df2$x)-(60-1)) #For the number of days - n - 1 
  ,function(i) {
    data[[i]] <- list('x'=df2$x[seq.int(i,i+(60-1))] 
                            ,'y' = df2$y[seq.int(i,i+(60-1))])
  })

因此,最终输出将是一组列表,例如上方的输出或嵌套的数据框

ID |last_date  | data
1  | 2019-12-31| [60 x 3]
1  | 2019-12-30| [60 x 3]
1  | 2019-12-29| [60 x 3]
r sequence lapply nest
1个回答
0
投票

您可以尝试split然后嵌套lapply

lapply(split(df, df$id), function(x) lapply(1:60, function(y) x[y + 0:59,]))

这给出了一个列表,每个ID都有一个成员,每个成员本身就是包含滚动60天周期的数据帧的列表。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.