[英]Assigning a random score based on max value of grouped data using R
考慮一個樣本 dataframe;
| cat_name | brand_name | qty | amt |
-------------------------------------
| A | AA | 10 | 500 |
| A | AB | 8 | 400 |
| A | AC | 10 | 100 |
| B | BA | 20 | 250 |
| B | BB | 05 | 150 |
| B | BC | 10 | 100 |
我想根據 dataframe 中存在的每個組的最大值分配一個分數,例如,對於上述數據集,我可以提供以下示例分數;
| cat_name | brand_name | qty | amt | score |
----------------------------------------------
| A | AA | 10 | 500 | 100 |
| A | AB | 8 | 400 | 80 |
| A | AC | 10 | 100 | 30 |
| B | BA | 20 | 250 | 100 |
| B | BB | 05 | 150 | 75 |
| B | BC | 10 | 100 | 30 |
如前所述,我將基於 0 - 100 分配一個值作為分數,然后根據最大和最小值為數據集中的每個組分配一個分數。
我可以使用 sample.int() 根據行數輕松分配隨機值,但是,有沒有一種方法可以根據 dataframe 中每個組的最大和最小數量分配特定值。 我通常會按 cat_name 進行分組。
這是dplyr
按cat_name
和brand_name
分組的方法。 然后它在該組的 min 和 max 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.