获取给定输入值的数据帧范围(即1返回df [1:10,])

时间:2019-04-04 09:11:05

标签: r dataframe

我有一个数据框df,我想在R中创建一个函数,该函数在给定输入数字的情况下返回数据框的10个条目的范围。那就是:

    If input number is equal to 1, the function returns df[1:10,]

    If input number is equal to 2, the function returns df[11:20,]

    If input number is equal to 3, the function returns df[21:30,]

    ...

就像它们是页面一样:第1页显示10个条目,第2页显示接下来的10个条目,依此类推。

注意:

  1. 如果没有更多的“十个条目”要返回,则该函数应返回数据框中剩余的所有内容

  2. 数据帧的长度不固定(即该函数要求使用df并返回“页面”)。

实施起来似乎很简单,但我无法弄清楚如何以正确,快速的方式进行操作。

修改

对不起,我的意思是返回行而不是列。刚刚编辑。但是@Freakazoid解决方案或多或少地发挥了作用,只是逐个更改ncol(请参见下面的解决方案)

2 个答案:

答案 0 :(得分:2)

以下功能可以解决问题:

df <- data.frame(matrix(rnorm(1020), nrow=54, ncol=3))

batch_df <- function(df, batch_part) {
  nbr_row <- nrow(df)
  batch_size <- 10
  nbr_of_batchs <- as.integer(nbr_row/batch_size)
  last_batch_size <- (nbr_row - nbr_of_batchs*batch_size) 

  batch_indizes <- c(rep(1:nbr_of_batchs, each=batch_size), 
                     rep(nbr_of_batchs+1, last_batch_size))

  if(all(batch_part %in% batch_indizes)) {
    row_index <- which(batch_indizes %in% c(batch_part))
    ret_df <- df[ row_index,]
  } else {
    ret_df <- data.frame()
  }
  return(ret_df)
}

batch_df(df, 3)

该函数首先为行定义索引。使用这些索引,函数将搜索您要选择的batch_part。 该函数不仅可以取一个数字;还可以取一个数字。它可以作为向量,您可以一次选择多个批处理零件。

输出:

       X1          X2         X3
21  0.7168950  0.88057886  0.1659177
22 -1.0560819 -0.53230247 -0.4204708
23  0.4835649 -1.43453719  0.1563253
24  0.1266011  1.22149179 -0.7924120
25  0.3982262 -0.59821992 -1.1645105
26 -0.4809448  0.42533877  0.2359328
27 -0.1530060 -0.23762552  0.9832919
28  0.8808083 -0.06004995 -1.0810818
29 -0.2924377 -1.23812802 -0.9057353
30 -0.2420152 -0.52037258  0.7406486

答案 1 :(得分:1)

输入数字i,请尝试

j <- i * 10
max <- pmin(j, nrow(df))
df[(j-9):max, ]