为因子添加新级别并替换现有级别

Lia*_*nho 6 r

我在处理数据帧的级别名称时遇到了很大的麻烦.

我有一个大数据框,其中一个colums是一个有很多级别的因素.

问题是这些数据中的一些是重复的,我的分析中的下一步不接受重复数据.所以我需要更改重复级别的名称,以便继续我的下一步.

让我举个例子:

假设我们有一个带有一个列的简单数据框:

> df
col_foo
1   bar1
2   bar2
3   bar3
4   bar2
5   bar4
6   bar5
7   bar3
Run Code Online (Sandbox Code Playgroud)

如果我们查看该列,我们会发现它是一个具有5个不同级别的因子.

>df$col_foo
[1] bar1 bar2 bar3 bar2 bar4 bar5 bar3
Levels: bar1 bar2 bar3 bar4 bar5
Run Code Online (Sandbox Code Playgroud)

好的,问题来了.看到水平bar2和bar3被复制.我想知道的是我如何添加级别名称,类似于bar2_X仅替换重复的名称.所以数据框应该变成这样:

> df
col_foo
1   bar1
2   bar2
3   bar3
4   bar2_X
5   bar4
6   bar5
7   bar3_X
Run Code Online (Sandbox Code Playgroud)

那可能吗 ?我无法更改列的类,它应该仍然是一个因素,所以需要更改它的解决方案将无法解决我的问题,除非有可能再次强制考虑因素.

谢谢

Ric*_*ton 10

打电话make.names与unique = TRUE您列.

df$col_foo <- factor(make.names(df$col_foo, unique = TRUE))
Run Code Online (Sandbox Code Playgroud)


Gre*_*now 4

如果您希望所有条目都是唯一的,那么与仅使用字符变量相比,因子并不会为您带来更多好处。

执行您想要的操作的最简单方法可能是强制转换为字符向量,使用该duplicated函数查找重复项并将某些内容粘贴到它们的末尾,然后如果您想使用将factor其重新强制回一个因子。可能是这样的:

df$col_foo <- factor( ifelse( duplicated(df$col_fo), 
                    paste(df$col_foo, '_x', sep=''), as.character(df$col_foo)))
Run Code Online (Sandbox Code Playgroud)