使用R从数据框中提取唯一值

Ele*_*ino 6 r unique dataframe

我有一个包含多列的数据框,我希望能够隔离两列并获得唯一值的总数...这是我的意思的一个例子:

假设我有一个数据框df:

df<- data.frame(v1 = c(1, 2, 3, 2, "a"), v2 = c("a", 2 ,"b","b", 4))
df

  v1 v2
1  1  a
2  2  2
3  3  b
4  2  b
5  a  4
Run Code Online (Sandbox Code Playgroud)

现在我想要做的只是提取两列上的唯一值.因此,如果我只为每列使用unique(),那么输出将如下所示:

> unique(df[,1])
[1] 1 2 3 a
> unique(df[,2])
[1] a 2 b 4
Run Code Online (Sandbox Code Playgroud)

但这并不好,因为它只找到每列的唯一值,而我需要两列上唯一值的总量!例如,两个列中都重复了'a',但我只想计算一次.我需要的输出示例; 想象列V1和V2如下所示放在彼此之上:

  V1_V2
1      1
2      2
3      3
4      2
5      a
6      a
7      2
8      b
9      b
10     4
Run Code Online (Sandbox Code Playgroud)

V1_V2的唯一值是:

   V1_V2
1      1
2      2
3      3
5      a
8      b
10     4
Run Code Online (Sandbox Code Playgroud)

然后我可以使用nrow()计算行数.任何想法我是如何实现这一目标的?

989*_*989 10

这非常适合union:

data.frame(V1_V2=union(df$v1, df$v2))

#  V1_V2
#1     1
#2     2
#3     3
#4     a
#5     b
#6     4
Run Code Online (Sandbox Code Playgroud)

  • 这正是我想要做的......我必须有大约 15 行代码试图完成你在 1 中取得的成就......谢谢! (2认同)

Gui*_*ira 8

使用这种方法,无论您有多少列,您都可以获得唯一值:

df2 <- as.vector(as.matrix(df))
unique(df2)
Run Code Online (Sandbox Code Playgroud)

然后,只需使用length.