嗨我是新来的r我有一个问题,即从名为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
这只是一个例子,我有超过20000篇文章 我希望基于数据框格式的文章在用户之间建立关系,例如
**##for article one##**
1258 54789
1258 547821
47789 547821
**##similarly for article 2##**
3258 4521
3258 4528
4528 4521
我使用稀疏矩阵格式但是r内存不允许我找到用户和文章的网络和中心分数。任何帮助都将受到高度赞赏。其他一些信息是 dput(头(W2)) 结构(列表(faID = c(1L,1L,1L,1L,1L,1L),uID = c(20909L,6661L,1591L,28065L,42783L,3113L)),. Name = c(“faID”,“uID “),row.names = c(7L,9L,10L,12L,14L,16L),class = data.frame”)
暗淡(W2) [1] 364323 2
答案 0 :(得分:1)
以下是关于如何为邻接构建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
。