R:如何根据频率为网络创建权重?

时间:2018-06-10 18:18:43

标签: r network-analysis

我有一个边缘列表(2列),我想根据数据中每个单词的提及次数创建第3列,每个节点都有权重。

参见我的数据。

例如:'oil''bad''gas'出现多次,我想在每次出现同一个时添加值'1'(并删除多行)。

dat

2 个答案:

答案 0 :(得分:2)

针对此案例的简单解决方案就是使用table

#create some sample data
set.seed(1)
node1<-rep("oil drilling", 20)
node2<-sample(c("gas", "frack", "pollute", "good"),20,replace=T)

edglst<-data.frame(node1, node2)              

head(edglist,10)

          node1   node2
1  oil drilling   frack
2  oil drilling   frack
3  oil drilling pollute
4  oil drilling    good
5  oil drilling     gas
6  oil drilling    good
7  oil drilling    good
8  oil drilling pollute
9  oil drilling pollute
10 oil drilling     gas

#use table to get a dataframe with one row per combination and its frequency
as.data.frame(table(edglst))

    node1   node2 Freq
1 oil drilling   frack    5
2 oil drilling     gas    4
3 oil drilling    good    6
4 oil drilling pollute    5

编辑:如果您的数据中有某些可能的节点组合,您可能还需要删除一些0,在这种情况下

x<-as.data.frame(table(edglst))
x<-x[!x$Freq==0,]

答案 1 :(得分:2)

我不想输入您的数据,因此我将使用一些生成的数据进行说明。

set.seed(1234)
x = sample(LETTERS[1:6], 20, replace=TRUE)
y = sample(letters[1:6], 20, replace=TRUE)
dat = data.frame(x,y)

您可以从count包中的plyr功能获取所需的计数。

library(plyr)
count(dat)
   x y freq
1  A b    1
2  A d    1
3  B b    4
4  B e    1
5  B f    2
6  D a    3
7  D b    2
8  D e    2
9  E c    1
10 F b    1
11 F d    1
12 F e    1