首页 > 解决方案 > x行的滑动数据集R

问题描述

我有一个如下所示的数据集,并想为最后 20 行创建一个嵌套数据框。

x <- rep(1:100, 1)
y <- rnorm(100)
z <- rnorm(100)*2

data.frame(x,y,z)

例如,其中 x = 100 将包括 x = 81:100 的行的记录,x = 99 将包括 80:99 等等。如果之前没有 20 行,则仅包括之前的行数,例如 15 将包括 1:15。

理想的输出将被嵌套,因此函数可以应用于所有数据帧

标签: rwindowtidy

解决方案


如果我理解正确,这个函数应该适合:

#library
library(tidyverse)

#data
x <- rep(1:100, 1)
y <- rnorm(100)
z <- rnorm(100)*2

dataf <- data.frame(x,y,z)

#working function
getDf <- function(df, n) {

  if (n >= 19) {

    return(df %>% slice((n-19):n))  

  } else {

    return(df %>% slice(1:n))

  }

}

#examples
getDf(dataf,100)

getDf(dataf,99)

getDf(dataf,15)

推荐阅读