如何在 R 数据框中使重复的因子水平唯一?

具有重复级别的因子表示分组数据,但如果我们要将分组数据转换为名义数据,则必须删除重复值或将其转换为唯一值。为了使 R 数据框中的重复因子水平唯一,我们可以使用make.unique函数。

查看以下示例以了解其工作原理。

示例 1

以下代码段创建了一个示例数据框 -

Factor<-factor(sample(c("Hot","Cold","Warm","Room Temp"),20,replace=TRUE))
Sales<-sample(11:50,20)
df1<-data.frame(Factor,Sales)
df1

创建了以下数据框

 Factor    Sales
1  Warm      43
2  Cold      50
3  Hot       33
4  Hot       25
5  Warm      22
6  Cold      20
7  Hot       18
8  Warm      35
9  Hot       38
10 Room Temp 32
11 Cold      41
12 Hot       40
13 Cold      21
14 Cold      15
15 Cold      23
16 Room Temp 26
17 Cold      48
18 Warm      28
19 Cold      42
20 Room Temp 27

要在上面创建的数据框中使 df1 的 Factor 列中的级别唯一,请将以下代码添加到上面的代码段中 -

Factor<-factor(sample(c("Hot","Cold","Warm","Room Temp"),20,replace=TRUE))
Sales<-sample(11:50,20)
df1<-data.frame(Factor,Sales)
within(df1,Factor<- ave(as.character(Factor),FUN=make.unique))

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

 Factor    Sales
1 Warm       43
2 Cold       50
3 Hot        33
4 Hot.1        25
5 Warm.1       22
6 Cold.1       20
7 Hot.2        18
8 Warm.2       35
9 Hot.3        38
10 Room Temp   32
11 Cold.2      41
12 Hot.4       40
13 Cold.3      21
14 Cold.4      15
15 Cold.5      23
16 Room Temp.1 26
17 Cold.6      48
18 Warm.3      28
19 Cold.7      42
20 Room Temp.2 27

示例 2

以下代码段创建了一个示例数据框 -

Class<-factor(sample(c("First","Second","Third"),20,replace=TRUE))
Price<-sample(1:10,20,replace=TRUE)
df2<-data.frame(Class,Price)
df2

创建了以下数据框

  Class   Price
1 First    9
2 Second   5
3 Second   7
4 First    7
5 First    8
6 Second   9
7 First    8
8 First   10
9 First    3
10 Third   3
11 Third   6
12 First   3
13 First   8
14 First   3
15 Third   5
16 Second  2
17 First   8
18 Second  2
19 Third   4
20 Third   4

要在上面创建的数据框中使 df2 的 Class 列中的级别唯一,请将以下代码添加到上面的代码段中 -

Class<-factor(sample(c("First","Second","Third"),20,replace=TRUE))
Price<-sample(1:10,20,replace=TRUE)
df2<-data.frame(Class,Price)
within(df2,Class<-ave(as.character(Class),FUN=make.unique))
输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

  Class   Price
1 First     9
2 Second    5
3 Second.1  7
4 First.1   7
5 First.2   8
6 Second.2  9
7 First.3   8
8 First.4  10
9 First.5   3
10 Third    3
11 Third.1  6
12 First.6  3
13 First.7  8
14 First.8  3
15 Third.2  5
16 Second.3 2
17 First.9  8
18 Second.4 2
19 Third.3  4
20 Third.4  4

猜你喜欢