两列中的唯一值列表

时间:2014-12-02 18:02:52

标签: r unique dplyr

我想创建两列唯一值列表。我使用网络分析数据集(无向图),我的数据集如下:

df <- data.frame(unit1_name = c("unit 1","unit 1", "unit 2"), 
             unit2_name = c("unit 2","unit 3","unit 3"))

所以我在每个元素(称为节点)之间都有所有连接(称为边缘)。

结果我想得到一个清单:

unit 1
unit 2
unit 3

当然我可以编写很多代码行但是可以尽可能快地完成吗?也许在dplyr包中?

2 个答案:

答案 0 :(得分:2)

一个简单的方法是:

unique(unlist(df))
#[1] unit 1 unit 2 unit 3
#Levels: unit 1 unit 2 unit 3

答案 1 :(得分:0)

我非常喜欢R中的table函数。您不仅可以获取唯一值,还可以获取每个值的频率。

> table(unlist(df))

unit 1 unit 2 unit 3 
     2      2      2

如果您只想在table对象中访问唯一值而不是频率,则可以调用names

> names(table(unlist(df)))
[1] "unit 1" "unit 2" "unit 3"

绝对有一些开销比纯unique,在这里我创建了一个大小为1000万的数字向量,这些是他们的性能比较。

> a <- sample(1:10, 1e7, replace=TRUE)
> system.time(unique(a))
   user  system elapsed 
  0.259   0.031   0.291 
> system.time(table(a))
   user  system elapsed 
  3.073   0.184   3.257