如何在 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

为了使上面创建的数据框中 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

为了使上面创建的数据框中 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

更新于: 2021-11-02

2K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.