问题描述
我必须在 Pagerank 上进行一个项目,并且需要计算它落在每个页面上的概率。文本文件也太大而无法放入 Excel 文件中,我在想出计算概率的方法时遇到了问题。什么是最有效的计算方法?下面列出了一个添加了概率的示例和一个没有概率的示例。例如,页面 0 的概率是 25%,因为有 4 个链接。该文本文件称为 pagerank.txt。我可以使用 Python、R、sql 和 Excel。
0 1 0.25
0 2 0.25
0 3 0.25
0 4 0.25
1 2
1 3
1 4
1 5
1 6
解决方法
在 R 中,您可以在基础 R、dplyr
或 data.table
中执行此操作。
假设您已将 df
中的数据读入 R 并且两列分别为 V1
和 V2
,您可以这样做:
#Base R
transform(df,prob = 1/ave(V2,V1,FUN = length))
# V1 V2 prob
#1 0 1 0.25
#2 0 2 0.25
#3 0 3 0.25
#4 0 4 0.25
#5 1 2 0.20
#6 1 3 0.20
#7 1 4 0.20
#8 1 5 0.20
#9 1 6 0.20
#dplyr
library(dplyr)
df %>% group_by(V1) %>% mutate(prob = 1/n())
#data.table
library(data.table)
setDT(df)[,prob := 1/.N,V1]
数据
df <- structure(list(V1 = c(0L,0L,1L,1L),V2 = c(1L,2L,3L,4L,5L,6L)),class = "data.frame",row.names = c(NA,-9L))