Поскольку mpg
является непрерывной переменной, вы можете произвольно сгруппировать данные, отсортировав фрейм данных по его значениям, а затем просто добавив переменную группировки с помощью rep(x, each = n)
.Например, используя базы R и n <- 8
для групп по 8:
df <- mtcars[order(mtcars$mpg),]
df$group <- rep(1:(nrow(df) / n), each = n)
Вызов следующего вернет первое наблюдение из каждой группы, которое является вашей отсечкой, и присоединит его к исходному кадру данных:
cutoffs <- aggregate(df$mpg, list(group = df$group), `[`, 1)
merge(df, cutoffs, by = "group")
#### OUTPUT ####
group mpg cyl disp hp drat wt qsec vs am gear carb x
1 1 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 10.4
2 1 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 10.4
3 1 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 10.4
4 1 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 10.4
5 1 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 10.4
6 1 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 10.4
7 1 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 10.4
8 1 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 10.4
9 2 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 15.5
10 2 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 15.5
11 ...
Если вы чувствуете себя комфортно с dplyr, вы можете использовать ntile
, left_join
и summarise
:
library(dplyr)
mutate(mtcars, group = ntile(mpg, 4)) %>%
group_by(group) %>%
left_join(summarise(., cutoff = first(mpg, order_by = mpg)), by = "group") %>%
arrange(mpg)
#### OUTPUT ####
# A tibble: 32 x 13
mpg cyl disp hp drat wt qsec vs am gear carb group cutoff
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl>
1 10.4 8 472 205 2.93 5.25 18.0 0 0 3 4 1 10.4
2 10.4 8 460 215 3 5.42 17.8 0 0 3 4 1 10.4
3 13.3 8 350 245 3.73 3.84 15.4 0 0 3 4 1 10.4
4 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 1 10.4
5 14.7 8 440 230 3.23 5.34 17.4 0 0 3 4 1 10.4
6 15 8 301 335 3.54 3.57 14.6 0 1 5 8 1 10.4
7 15.2 8 276. 180 3.07 3.78 18 0 0 3 3 1 10.4
8 15.2 8 304 150 3.15 3.44 17.3 0 0 3 2 1 10.4
9 15.5 8 318 150 2.76 3.52 16.9 0 0 3 2 2 15.5
10 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4 2 15.5
# … with 22 more rows