2014-12-02 112 views
0

我想从两列创建唯一值列表。我用网络分析数据集(无向图)工作,我的数据集的样子:来自两列的唯一值列表

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包?

+0

为什么你不告诉我们你有的代码和你不喜欢的代码,然后我们可以提出改进建议。 – chollida 2014-12-02 18:06:59

回答

2

一个简单的方法是:

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

这是我的预期!感谢:)+ 10 – Nicolabo 2014-12-02 18:13:05

0

我真的很喜欢在河的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