将基于百分位数的组分配给 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
现在假设我将 Values
的总和乘以 Factors
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
属于哪个组。我希望这是有道理的。谢谢大家!
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))
我不知道如何处理这个特殊问题。
假设我有以下数据框:
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
现在假设我将 Values
的总和乘以 Factors
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
属于哪个组。我希望这是有道理的。谢谢大家!
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))