разделить фрейм данных по медиане каждого столбца - PullRequest
0 голосов
/ 26 июня 2018

У меня есть числовой фрейм данных со многими столбцами.Я хотел бы разделить его на группы, основываясь на том, находится ли наблюдение выше или ниже медианы по каждой оси.

Например:

library(dplyr)
df <- data_frame(x = c(rnorm(5, 1, 0.1), rnorm(5, 3, 0.1), 
                       rnorm(5, 1, 0.1), rnorm(5, 3, 0.1)), 
                 y = c(rnorm(5, -1, 0.1), rnorm(5, 5, 1), 
                       rnorm(5, 5, 1), rnorm(5, -1, 0.1)))

Здесь я должен получить 4 группы: точкивокруг (1,5), точки вокруг (1, -1) и т. д.

Я могу сделать это с помощью ifelse и определить границы каждой области, но на практике у меня будетмного столбцов.Есть ли более простое решение dplyr / BaseR?

1 Ответ

0 голосов
/ 26 июня 2018

Вот полный ответ на вопрос, основанный на важном вводе от @docendo discimus:

df <- df %>% mutate_all(funs(above_med = . > median(.)))
df <- df %>% mutate(Group = df %>% group_by_at(which(sapply(df, class) == "logical")) %>% group_indices())

Вывод выглядит так:

# A tibble: 20 x 5
     x      y x_above_med y_above_med Group
   <dbl>  <dbl> <lgl>       <lgl>       <int>
   0.743 -0.983 FALSE       FALSE           1
   0.996 -0.901 FALSE       FALSE           1
   0.966 -1.00  FALSE       FALSE           1
   1.06  -1.18  FALSE       FALSE           1
   0.948 -0.971 FALSE       FALSE           1
   3.02   5.45  TRUE        TRUE            4
   3.19   5.59  TRUE        TRUE            4
   3.08   5.37  TRUE        TRUE            4
   3.04   3.61  TRUE        TRUE            4
   2.97   5.85  TRUE        TRUE            4
   0.969  5.27  FALSE       TRUE            2
   1.11   5.40  FALSE       TRUE            2
   1.12   5.62  FALSE       TRUE            2
   1.17   4.59  FALSE       TRUE            2
   0.899  6.19  FALSE       TRUE            2
   3.01  -0.987 TRUE        FALSE           3
   3.01  -0.963 TRUE        FALSE           3
   2.85  -1.07  TRUE        FALSE           3
   2.96  -1.00  TRUE        FALSE           3
   3.00  -0.927 TRUE        FALSE           3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...