![](/img/trans.png)
[英]How to make a network plot using a "from-to-dataframe"?
[英]how to make a network of user in a dataframe?
嗨,我是新手,我遇到了一個問題,即從名為w2的數據幀中找到用戶(uID)的網絡和商品(faID)的網絡,例如
faID uID
1 1256
1 54789
1 547821
2 3258
2 4521
2 4528
3 98745
3 1256
3 3258
3 2145
這只是一個示例,我有2萬多篇文章,我想基於數據幀格式的文章在用戶之間建立關系,例如
**##for article one##**
1258 54789
1258 547821
47789 547821
**##similarly for article 2##**
3258 4521
3258 4528
4528 4521
我使用的是稀疏矩陣格式,但是r內存不允許我查找用戶和文章的網絡和中心評分。任何幫助將不勝感激。其他一些信息是dput(head(w2,))結構( list(faID = c(1L,1L,1L,1L,1L,1L),uID = c(20909L,6661L,1591L,28065L,42783L,3113L)),.names = c(“ faID”,“ uID”) ,row.names = c(7L,9L,10L,12L,14L,16L),類= data.frame“)
昏暗(w2)[1] 364323 2
這是關於如何為鄰接關系構造data.frame
的問題的一個答案(在許多可能的解決方案中)
user -- (article) -- user
使用dplyr
:
library( dplyr )
edges <- tbl_df( tab ) %>%
group_by( article ) %>%
do( {
tmp <- combn( sort(.$user), m = 2 )
data.frame( a = tmp[1,], b = tmp[2,], stringsAsFactors = FALSE )
} ) %>%
ungroup
這使
Source: local data frame [12 x 3]
article a b
1 1 u1 u2
2 1 u1 u3
3 1 u2 u3
4 2 u2 u4
...
如果您要總結兩個用戶共有多少篇文章,可以通過以下方法進行操作:
edges <- edges %>%
group_by( a, b ) %>%
summarise( article_in_common = length(article) ) %>%
ungroup
Source: local data frame [6 x 3]
a b article_in_common
1 u1 u2 1
2 u1 u3 1
3 u1 u4 1
4 u1 u6 1
...
請注意,這是可能的,因為你sort
,以號召主編用戶之前combn
。
根據這些數據,您可以輕松構造igraph
對象:
library(igraph)
g <- graph.data.frame( select(edges, a, b, weight = article_in_common), directed = FALSE )
plot(g)
在此圖上,您無法調用任何可用的集中度或社區度量。 例如看到? centralize.scores
? centralize.scores
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.