亲爱的,我是R的新人,我需要你的帮助,
我有一个用户名列表,我需要检索所有关注者和朋友,并创建一个边缘列表并将其存储在CSV.file中以供进一步分析.问题:我编译的用户名列表非常大,我需要遍历用户向量并将每个用户的结果聚合到一个文件中.
我可以一个接一个地做到这一点,但显然这样做会更好.这是我用于为一个Twitter用户创建边缘列表的代码.正如我解释的那样,我打算做同样的事情,但对于大量的Twitter用户名.
假设已经建立了与Twitter API的连接,我使用以下包:
library(twitteR)
library(foreign)
library(xlsx)
library(base64enc)
library(rJava)
library(devtools)
library(RCurl)
library(igraph)
然后我得到了用户朋友:
start <- getUser("@camharvey")
friends_object <- lookupUsers(start$getFriendIDs())
friends_object
friendsCount(start)
获得用户关注者
followers_object <- lookupUsers(start$getFollowerIDs())
followers_object
followersCount(start)
从两个对象创建列表
friends <- sapply(friends_object[1:117],name)
followers <- sapply(followers_object[1:1033],name)
将两个列表合并到一个数据框中,以便从关注者和朋友创建边缘文件
relations <- merge(data.frame(User='@camharvey',followers=friends), data.frame(User=followers, followers='@camharvey'), all=TRUE)
如何为多个用户名执行相同操作?
提前致谢
最佳答案 您可以创建一个for循环并循环遍历用户名列表以填充列表.然后将此列表转换为边缘列表.这需要一些时间,因为您说您拥有大量用户,并且朋友和关注者列表可能非常大. (特别是,行lookupUsers(启动$getFriendIDs())和followers_object< – lookupUsers(启动$getFollowerIDs())需要相当长的时间,不确定是否有更有效的方法来实现这一点…)
users <- c("@camharvey",etc.) #List of usernames
userrelations <- list() #Create an empty list to populate
for (i in 1:length(users)){
start <- getUser(users[i])
friends_object <- lookupUsers(start$getFriendIDs())
followers_object <- lookupUsers(start$getFollowerIDs())
friends <- sapply(1:length(friends_object),
function(x) name(friends_object[[x]]))
followers <- sapply(1:length(followers_object),
function(x) name(followers_object[[x]]))
userrelations[[i]] <- merge(data.frame(User=users[i],followers=friends),
data.frame(User=followers, followers=users[i]),
all=TRUE)
}
这将填充每个用户的朋友和关注者网络的列表.接下来,将列表的所有元素组合到一个数据框中并写入csv:
user_el <- do.call("rbind",userrelations)
write.csv(user_el, "filename.csv", row.names = F)
我只用了三个用户尝试了这个,花了一些时间.在我的计算机上,运行时间如下所示:
user system elapsed
175.544 3.356 317.304
仅供参考,启动$getFollowerIDs()比lookupUsers(启动$getFollowerIDs())快得多,所以你可以使用ID号而不是名字,它会更快.