Я использую 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)