Извлечение каждые 11 строк из фрейма данных - PullRequest
0 голосов
/ 23 апреля 2020

Итак, у меня есть фрейм данных, и я хочу получать каждые 11 строк. Не только каждые 11-ые строки, но и порция из 11 строк каждый раз, например:

     Subject Wt Dose  Time  conc
1        1 79.6 4.02  0.00  0.74
2        1 79.6 4.02  0.25  2.84
3        1 79.6 4.02  0.57  6.57
4        1 79.6 4.02  1.12 10.50
5        1 79.6 4.02  2.02  9.66
6        1 79.6 4.02  3.82  8.58
7        1 79.6 4.02  5.10  8.36
8        1 79.6 4.02  7.03  7.47
9        1 79.6 4.02  9.05  6.89
10       1 79.6 4.02 12.12  5.94
11       1 79.6 4.02 24.37  3.28

, а затем - позднее 11, а затем снова остальные 11 строк.

Я пробовал это

for (i in 1:nrow(Theoph)) {
  everyEleven = Theoph[11,i]
  everyEl
}

Но он просто дает мне первые 11 строк, а не второй кусок из 11 строк и так далее

Ответы [ 5 ]

3 голосов
/ 23 апреля 2020

Может быть, вы можете попробовать split, как показано ниже

everyEleven <- split(Theoph,ceiling(seq(nrow(Theoph))/11))
1 голос
/ 23 апреля 2020

Мы можем использовать gl для создания индекса группировки

split(Theoph, as.integer(gl(nrow(Theoph), 11, nrow(Theoph))))
1 голос
/ 23 апреля 2020

Поскольку в предоставленных вами образцах данных есть столбец Subject, который, как я полагаю, представляет идентификаторы субъекта, и есть только 11 строк с одинаковым значением для Subject, вы можете использовать

split(Theoph, Theoph$Subject)
1 голос
/ 23 апреля 2020

Попробуйте это как адаптировано из [, разделенного на несколько подмножеств фреймов данных с помощью dplyr: group_by?

library(tibble)
library(dplyr)  
library(tidyr)

Make an indicative dataframe as your data in the question is only 11 rows.

tib <- tibble(sub = rep(1:33),
              var = runif(33))

tib1 <- 
  tib %>% 
  # create a grouping variable every 11 rows , unless there is a variable in your data which does the same. 
  mutate(grp = rep(1:3, each = 11)) %>% 
  group_by(grp) %>%
  nest()%>%
  select(data) %>%
  unlist(recursive = FALSE)


Дает вам:

$data1
# A tibble: 11 x 2
     sub   var
   <int> <dbl>
 1     1 0.258
 2     1 0.337
 3     1 0.463
 4     1 0.856
 5     1 0.466
 6     1 0.701
 7     1 0.548
 8     1 0.999
 9     1 0.454
10     1 0.292
11     1 0.173

$data2
# A tibble: 11 x 2
     sub   var
   <int> <dbl>
 1     2 0.148
 2     2 0.487
 3     2 0.246
 4     2 0.279
 5     2 0.130
 6     2 0.730
 7     2 0.312
 8     2 0.935
 9     2 0.968
10     2 0.745
11     2 0.485

$data3
# A tibble: 11 x 2
     sub        var
   <int>      <dbl>
 1     3 0.141     
 2     3 0.200     
 3     3 0.00000392
 4     3 0.993     
 5     3 0.644     
 6     3 0.334     
 7     3 0.567     
 8     3 0.817     
 9     3 0.0342    
10     3 0.718     
11     3 0.527   

0 голосов
/ 23 апреля 2020

Я предполагаю, что ваш фрейм данных имеет длину 11*N строк, а затем

everyEleven = vector(mode = "list", length = N)

for(i in 1:N){
  start = (i - 1) * 11 + 1
  end = i * 11
  everyEleven[[i]] = Theoph[start:end, ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...