R–;使用Twitter句柄列表上的循环来提取tweet并创建多个数据帧

R–;使用Twitter句柄列表上的循环来提取tweet并创建多个数据帧,r,twitter,web-scraping,rtweet,R,Twitter,Web Scraping,Rtweet,我有一个由Twitter句柄组成的df,我希望定期清理它 df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama")) 我的方法学 我想运行一个for循环,该循环在我的df中的每个句柄上循环,并创建多个数据帧: 1) 通过使用rtweet库,我想使用search\u tweets功能收集tweets 2) 然后,我想将每个数据帧的新tweet合并到现有tweet,然后使用un

我有一个由Twitter句柄组成的df,我希望定期清理它

df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama"))
我的方法学

我想运行一个
for
循环,该循环在我的df中的每个句柄上循环,并创建多个数据帧:

1) 通过使用
rtweet
库,我想使用
search\u tweets
功能收集tweets

2) 然后,我想将每个数据帧的新tweet合并到现有tweet,然后使用
unique
功能删除任何重复的tweet

3) 对于每个数据帧,我想添加一列,其中包含用于获取数据的Twitter句柄的名称。例如:对于使用handle@BarackObama获得的tweet数据库,我想使用handle@BarackObama添加一个名为
Source
的列

4) 如果API返回0条推文,我希望忽略步骤2)。通常,当API返回0条tweet时,当它试图将空数据帧与现有数据帧合并时,我会收到一个错误

5) 最后,我想将每次刮取的结果保存到不同的dataframe对象。每个dataframe对象的名称都是它的Twitter句柄,小写,不带
@

我想要的输出

library(rtweet)
library(ROAuth)

#Accessing Twitter API using my Twitter credentials

key <-"yKxxxxxxxxxxxxxxxxxxxxxxx"
secret <-"78EUxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
setup_twitter_oauth(key,secret)

#Dataframe of Twitter handles    
df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama"))

# Setting up the query
query <- as.character(df$twitter_handles)
query <- unlist(strsplit(query,","))
tweets.dataframe = list()

# Loop through the twitter handles & store the results as individual dataframes
for(i in 1:length(query)){
  result<-search_tweets(query[i],n=10000,include_rts = FALSE)
  #Strip tweets that  contain RTs
  tweets.dataframe <- c(tweets.dataframe,result)
  tweets.dataframe <- unique(tweets.dataframe)
}
我想要的输出是4个数据帧,
katyperry
justinbieber
cristiano
barackobama

我的尝试

library(rtweet)
library(ROAuth)

#Accessing Twitter API using my Twitter credentials

key <-"yKxxxxxxxxxxxxxxxxxxxxxxx"
secret <-"78EUxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
setup_twitter_oauth(key,secret)

#Dataframe of Twitter handles    
df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama"))

# Setting up the query
query <- as.character(df$twitter_handles)
query <- unlist(strsplit(query,","))
tweets.dataframe = list()

# Loop through the twitter handles & store the results as individual dataframes
for(i in 1:length(query)){
  result<-search_tweets(query[i],n=10000,include_rts = FALSE)
  #Strip tweets that  contain RTs
  tweets.dataframe <- c(tweets.dataframe,result)
  tweets.dataframe <- unique(tweets.dataframe)
}
库(rtweet)
图书馆(ROAuth)
#使用我的Twitter凭据访问Twitter API
key
tweets.dataframe=list()
#循环遍历twitter句柄并将结果存储为单个数据帧
用于(i/1:长度(查询)){
结果0){#仅当结果有数据时

tweets.dataframe没有任何tweet时,结果的数据类型是什么?如果其data.frame则
If(nrow(result)==0)下一步
可能会有帮助。你说的LargeList是指不太可能,因为package没有使用它,数据类型是一个空的数据帧。是的,它看起来像一个大列表,但我确信我的for循环需要某种修改,以使结果有意义。谢谢。尽管此
for循环似乎没有向exi添加新的tweetsting单个数据帧。我已经使用
min()
max()对此进行了测试
变量处创建的
函数。是否有办法确保每次重新运行此循环时,只添加新的推文,而保留现有的推文?此外,我对我的问题进行了一个小编辑,并在我的方法中添加了步骤3。如果您能在这方面提供指导,我将不胜感激。谢谢。您没有详细信息ny“现有单个数据帧”…它们是什么/在哪里?当我说现有的数据帧时,我的意思是,对于循环的未来重新运行,我希望将新的tweet添加到在上一次迭代中收集的tweet的数据帧中。因此,每次我重新运行循环并收集最新的tweet时,我的数据帧中的行数应该大于循环中的行数重新运行循环之前的dataframe。添加了一个新的解决方案,用于创建新的或添加到现有数据帧
twitter_handles <- c("@katyperry","@justinbieber","@Cristiano","@BarackObama")

# Loop through the twitter handles & store the results as individual dataframes
for(handle in twitter_handles) {
  result <- search_tweets(handle, n = 15 , include_rts = FALSE)
  result$Source <- handle

  df_name <- substring(handle, 2)

  if(exists(df_name)) {
    assign(df_name, unique(rbind(get(df_name), result)))
  } else {
    assign(df_name, result)
  }
}