簡體   English   中英

在R中將基於百分位數的組分配給數據框

[英]Assigning Percentile Based Groups to Dataframe in R

我在弄清楚如何解決這個特定問題上遇到了麻煩。

假設我有以下數據框:

set.seed(123)

Factors <- sample(LETTERS[1:26],50,replace=TRUE)
Values <- sample(c(5,10,15,20,25,30),50,replace=TRUE)
df <- data.frame(Factors,Values)
df

   Factors Values
1        H      5
2        U     15
3        K     25
4        W      5
5        Y     20
6        B     10
7        N      5
8        X     25
9        O     30
10       L     15
11       Y     20
12       L      5
13       R     15
Data goes all the way to row 50, but left out here

現在假設我按Factors Values的總和

Sum.df <- aggregate(Values ~ Factors, data = df, FUN = sum)
Sum.df

   Factors Values
1        A      5
2        B     35
3        C     25
4        D     30
5        F     30
6        G     75
7        H     20
8        I     55
9        J     20
10       K     60
11       L     20
12       M     20
13       N      5
14       O     55
15       P     20
16       Q     25
17       R     45
18       S     30
19       T     30
20       U     40
21       W     25
22       X     90
23       Y     55
24       Z     15

最后,我使用quantile來找到匯總數據的百分比截止值。

quantile(Sum.df$Values, probs = c(0.33,.66,1))

  33%   66%  100% 
22.95 35.90 90.00

好的,這是我的問題。 我要做的是根據其分位數創建三個組Group 1Group 2Group 3 因此,例如在Sum.df中, A的合計值為5,因此我想將該Factors分配給Group 1因為5小於22.95。 如果Sum.df中的值大於22.95或小於或等於35.9,則將其分配給組2,所有其他值分配給Group 3 我希望看到的是df中的新列,該列指示每個Factors所在的組。我希望這是有道理的。 多謝你們!

cut功能如何。 只需要在分位數中包括最小值。

q <- quantile(Sum.df$Values, probs = c(0, 0.33,.66,1))
Sum.df$group <- cut(Sum.df$Values, q, include.lowest=TRUE,
                    labels=paste("Group", 1:3))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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