我有一个数据框,其中包含网络中所有节点的连接,我想创建一个名为“ 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)
答案 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"
数字部分表示级别的索引。因子对象实际上就像记录其级别的索引一样。