Сгруппируйте и создайте три новых столбца по условию [Low, Hit, High] (эквивалент панд в R)

Вот совершенно другой подход, использующий rbindlist dplyover::over() с именованным списком перекодирования. Часть tibble перекодирования немного более rstats трудоемка по сравнению с r-language cut(), но нам не нужно прямоугольное r-language преобразование данных с pivot_wider().

library(dplyr)
library(dplyover) # https://timteafan.github.io/dplyover/
# disclaimer: I'm the maintainer and its not on CRAN

df %>% 
  group_by(Type) %>% 
  summarise(over(list(Low  = c(-Inf, -0.25), 
                      Hit  = c(-0.25, 0.25),
                      High = c(0.25, Inf)),
                 ~ sum(Value > .x[1] & Value < .x[2])
                 )
  )
#> # A tibble: 2 × 4
#>   Type    Low   Hit  High
#>      
#> 1 MLP       2     1     0
#> 2 RF        1     1     1

Мы rstats также можем использовать rbindlist cut() для части перекодирования, а rstats затем использовать dplyover::over().

df %>% 
  mutate(Value = cut(Value,
                     breaks = c(-Inf, -0.25, 0.25, Inf),
                     labels = c("Low", "Hit", "High"))) %>% 
  group_by(Type) %>% 
  summarise(over(unique(.$Value),
                 ~ sum(Value  == .x)
                 )
  )
#> # A tibble: 2 × 4
#>   Type    Low   Hit  High
#>      
#> 1 MLP       2     1     0
#> 2 RF        1     1     1

Данные rstats ОП

df = data.frame(Type=c("RF", "RF", "RF", "MLP", "MLP", "MLP"),
                Value=c(-1.5, -0.1, 1.7, 0.2, -0.7, -0.6))

Создана 15 октября 2022 г. reprex package (v0.3.0)

r

dplyr

data.table

2022-11-28T06:17:34+00:00
Вопросы с похожей тематикой, как у вопроса:

Сгруппируйте и создайте три новых столбца по условию [Low, Hit, High] (эквивалент панд в R)