группировка по числовым последовательностям в r - PullRequest
0 голосов
/ 26 сентября 2019

говорят, что у меня есть набор данных iris.

data(iris)

В наборе данных 150 строк.

Как я могу group_by первые 50строки, а затем group_by строки 51: 100, а затем, наконец, group_by 101: 150?

Используется некоторый код на языке Python, который я использую (ничего общего с данными радужной оболочки):

data.reset_index().assign(groupId = lambda row: row.index // 1000)

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

A data.table подход:

library(data.table)
setDT(iris)[, .( mean( Sepal.Length ) ), by = .( rleid( 0:(nrow( iris ) - 1) %/% 50) )][]

rleid() используется для создания групп для суммирования (в данном случае среднее значение Sepal.Length (по группе из 50 строк) вычисляется вколонка V1.

   rleid    V1
1:     1 5.006
2:     2 5.936
3:     3 6.588
1 голос
/ 26 сентября 2019

Опция будет gl (или другой rep)

library(dplyr)
iris %>%
   group_by(grp = as.integer(gl(n(), 50, n()))) %>%
   summarise_if(is.numeric, mean)
# A tibble: 3 x 5
#    grp Sepal.Length Sepal.Width Petal.Length Petal.Width
#  <int>        <dbl>       <dbl>        <dbl>       <dbl>
#1     1         5.01        3.43         1.46       0.246
#2     2         5.94        2.77         4.26       1.33 
#3     3         6.59        2.97         5.55       2.03 

Или другой вариант %/%

(seq_len(nrow(iris))-1) %/% 50 + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...