Нарезка данных на бункеры с разбиением в R - PullRequest
0 голосов
/ 10 сентября 2018

Я использую cut2 из функции библиотеки Hmisc в R, чтобы разрезать мой набор данных на фиксированное количество бинов, например,

library(Hmisc)
as.numeric(cut2(Catchment_Population_Log, g=4))

Но есть ли простой способ добавить уровень раздела,так я получаю n сокращений в категории?то есть я пытаюсь в основном использовать cut2 (или подобное) независимо для каждой категории (когда я делаю что-то похожее в SQL, я бы использовал PARTITION BY).

Так что в моей голове это было бы что-то вродеthis;

as.numeric(cut2(Catchment_Population_Log, g=4, partition_by=CategoryID))

Но в документации cut2 не видно ничего, что позволило бы это.Я играл с помощью split (), но не смог заставить что-либо работать.

Пример данных, включая вывод, который я ищу для получения

library(Hmisc)
library(dplyr)
category <- c('Category_1','Category_1','Category_1','Category_1','Category_2','Category_2','Category_2','Category_2','Category_3','Category_3','Category_3','Category_3')
catchment_population_log <- c(0.3,0.2,0.1,0.4,0.4,0.2,0.6,0.9,0.2,0.6,0.2,0.4)
exp_result <- c(2,1,1,2,1,1,2,2,1,2,1,2)
data <- data.frame(category, catchment_population_log)

# Result just using cut2 - data is cut into 2 bins
# based on their catchment_population_log value
data %>%
  mutate(just_using_cut2 = as.numeric(cut2(catchment_population_log,g=2)))

# This time, I'll manually transpose the expected result; each Category 
# should be split into 2 bins based on the catchment_population value 
# independently of each other.
# As a result, a 0.4 value might fall in bin 1 for one category,
# but bin 2 for another category

data %>%
  mutate(just_using_cut2 = as.numeric(cut2(catchment_population_log,g=2))) %>%
  cbind(exp_result)

1 Ответ

0 голосов
/ 10 сентября 2018

Благодаря Moody_Mudskipper я смог заставить его работать именно так, как мне нужно.

# This works with cut in base, as well as cut2, but I'm using cut2
library(Hmisc)
data %>%
  group_by(category) %>%
  mutate(population_bin = as.numeric(cut2(catchment_population_log,g=2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...