Вот подход с dplyr
для группировки по cat_name
и brand_name
. Затем он производит выборку между минимальным и максимальным значениями amt
для этой группы и назначает ее новому столбцу с mutate
.
library(dplyr)
data %>%
group_by(cat_name,brand_name) %>%
mutate(score = sample(seq(min(amt),max(amt)),n(),replace = TRUE))
## A tibble: 6 x 5
## Groups: cat_name, brand_name [6]
# cat_name brand_name qty amt score
# <fct> <fct> <int> <int> <int>
#1 A AA 10 500 466
#2 A AB 8 400 167
#3 A AC 10 100 12
#4 B BA 20 250 54
#5 B BB 5 150 73
#6 B BC 10 100 85
Данные
data <- structure(list(cat_name = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("A",
"B"), class = "factor"), brand_name = structure(1:6, .Label = c("AA",
"AB", "AC", "BA", "BB", "BC"), class = "factor"), qty = c(10L,
8L, 10L, 20L, 5L, 10L), amt = c(500L, 400L, 100L, 250L, 150L,
100L)), class = "data.frame", row.names = c(NA, -6L))