使数据框中的所有元素都是唯一的

Sak*_*ura 5 r

假设我的数据如下所示.

在这整个数据中,总共有3*A,2*B,2*C,只有1 D,E和F.

data <- read.table(textConnection("
col1 col2 
A B
A C
B A
C D
E F
"), header = TRUE)
Run Code Online (Sandbox Code Playgroud)

我想要做的是保持秩序和内容相同,但要使它们与众不同.例如,A变为A.1,A.2和A.3.

col1 col2 
A.1 B.2
A.2 C.2
B.1 A.3
C.1 D
E F
Run Code Online (Sandbox Code Playgroud)

有什么聪明的方法可以做到这一点吗?

我知道我可以使用make.uniquemake.names,但看起来它只适用于一列,而不适用于整个数据集.

Jaa*_*aap 5

使用:

dat[] <- make.unique(as.character(unlist(dat)))
Run Code Online (Sandbox Code Playgroud)

得到:

> dat
  col1 col2
1    A  B.1
2  A.1  C.1
3    B  A.2
4    C    D
5    E    F
Run Code Online (Sandbox Code Playgroud)


akr*_*run 2

一种选择是unlist数据集,然后使用未列出的向量ave获取序列paste并将其分配回原始数据集

v1 <- as.character(unlist(data))
data[] <- sub("\\.$", "", paste(v1, ave(v1, v1,
         FUN = function(x) if(length(x)>1) seq_along(x) else ""), sep="."))
data
#  col1 col2
#1  A.1  B.2
#2  A.2  C.2
#3  B.1  A.3
#4  C.1    D
#5    E    F
Run Code Online (Sandbox Code Playgroud)