将2列中的所有唯一值收集到一个新列中

时间:2019-11-28 16:27:12

标签: r

我有一个数据框,其中包含网络中所有节点的连接,我想创建一个名为“ nodes”的新数据框,其中包含所有唯一节点。我正在尝试做

eids<-as.factor(d$from)
mids<-as.factor(d$to)
nodes<-data.frame(c(eids,mids))
nodes<-unique(nodes)

但是当我尝试创建图形时,我得到:Some vertex names in edge list are not listed in vertex data frame,这意味着该方法会丢失我的部分数据。我的数据集很大,所以我在这里放了一个玩具数据集。

from<-c(2,3,4,3,1,2)
to<-c(8,8,7,5,6,5)
d<-data.frame(from,to)

1 个答案:

答案 0 :(得分:2)

首先,要解决您的问题,您可以使用unique(stack(d)[1])来获取具有一列的值为1至8的数据框。


在这里,我解释了为什么您的代码不起作用。使用c()组合因子类的对象很危险。您可以尝试以下示例:

(x <- factor(c("A", "B", "C", "D")))
# [1] A B C D
# Levels: A B C D

(y <- factor(c("E", "F", "G", "H")))
# [1] E F G H
# Levels: E F G H

c(x, y)
# [1] 1 2 3 4 1 2 3 4

实际上,因子对象基于数字数据,而不是字符。您可以剥离其类,然后发现它属于具有名为levels的属性的数字向量:

unclass(x)
# [1] 1 2 3 4
# attr(,"levels")
# [1] "A" "B" "C" "D"

数字部分表示级别的索引。因子对象实际上就像记录其级别的索引一样。

相关问题