Получить диапазоны данных в заданном входном значении (т. Е. 1 возвращает df [1:10,]) - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть фрейм данных 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 показаны десять записей, на странице 2 показаны следующие десять записей и т. Д.

Примечание:

  1. если больше нет «десяти записей» для возврата, функция должна вернуть все, что осталось в кадре данных

  2. длина кадра данных не фиксирована (т.е.функция запрашивает df для использования и «page» для возврата).

Это выглядит довольно просто для реализации, но я не могу понять, как это сделать правильно и быстро.

Редактировать

Я имел в виду возврат строк, а не столбцов, извините.Только что отредактировал.Но решение @Freakazoid более или менее помогает, просто изменяя ncol на nrow (см. Его решение ниже)

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Следующая функция делает свое дело:

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 голос
/ 04 апреля 2019

Учитывая введенный номер i, попробуйте

j <- i * 10
max <- pmin(j, nrow(df))
df[(j-9):max, ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...