我在处理数据帧的级别名称时遇到了很大的麻烦.
我有一个大数据框,其中一个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)
如果您希望所有条目都是唯一的,那么与仅使用字符变量相比,因子并不会为您带来更多好处。
执行您想要的操作的最简单方法可能是强制转换为字符向量,使用该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)