我有一个数据框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个条目,依此类推。
注意:
如果没有更多的“十个条目”要返回,则该函数应返回数据框中剩余的所有内容
数据帧的长度不固定(即该函数要求使用df并返回“页面”)。
实施起来似乎很简单,但我无法弄清楚如何以正确,快速的方式进行操作。
修改
对不起,我的意思是返回行而不是列。刚刚编辑。但是@Freakazoid解决方案或多或少地发挥了作用,只是逐个更改ncol(请参见下面的解决方案)
答案 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, ]