簡體   English   中英

使用 R 根據分組數據的最大值分配隨機分數

[英]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 進行分組。

這是dplyrcat_namebrand_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM