【问题标题】:Assigning Percentile Based Groups to Dataframe in R将基于百分比的组分配给 R 中的数据框
【发布时间】:2015-03-12 05:59:52
【问题描述】:

我不知道如何解决这个特殊问题。

假设我有以下数据框:

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

现在假设我将ValuesFactors 相加

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 1,Group 2,Group 3。例如,在Sum.df 中,A 的聚合值为 5,所以我想将 Factors 分配给 Group 1,因为 5 小于 22.95。如果 Sum.df 中的值大于 22.95 或小于或等于 35.9,则将其分配给第 2 组,其他所有分配给 Group 3。我希望看到的是 df 中的一个新列,它表示每个 Factors 所在的组。我希望这是有道理的。谢谢大家!

【问题讨论】:

    标签: r quantile


    【解决方案1】:

    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))
    

    【讨论】:

    • 完美,但是我将如何在 df 中创建一个带有 Factors 对应组的新列?
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多