我想创建两列唯一值列表。我使用网络分析数据集(无向图),我的数据集如下:
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 :(得分: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