簡體   English   中英

如何在數據幀中建立用戶網絡?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM