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

时间:2011-10-27 16:55:55

标签: r

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

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

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

让我举个例子:

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

> df
col_foo
1   bar1
2   bar2
3   bar3
4   bar2
5   bar4
6   bar5
7   bar3

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

>df$col_foo
[1] bar1 bar2 bar3 bar2 bar4 bar5 bar3
Levels: bar1 bar2 bar3 bar4 bar5

好的,问题来了。查看级别bar2bar3 重复。我想知道的是如何添加级别名称,例如bar2_X,并仅替换重复的名称。所以数据框应该变成这样:

> df
col_foo
1   bar1
2   bar2
3   bar3
4   bar2_X
5   bar4
6   bar5
7   bar3_X

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

由于

3 个答案:

答案 0 :(得分:10)

在列上使用make.names致电unique = TRUE

df$col_foo <- factor(make.names(df$col_foo, unique = TRUE))

答案 1 :(得分:4)

如果您希望所有条目都是唯一的,那么只使用一个字符变量就不会对您产生太多影响。

执行所需操作的最简单方法可能是强制使用字符向量,使用duplicated函数查找重复项并将某些内容粘贴到其末尾,然后如果要使用{{1}重新将它重新回到一个因素。可能是这样的:

factor

答案 2 :(得分:3)

您可以编辑因子变量的级别:

levels(df$col_foo) <- c(levels(df$col_foo),"bar2_X","bar3_X")

然后将重复的级别更改为您添加的新级别之一。