如何将列表保存为csv文件?

12

所以我正在使用twitteR,需要一种方法将我的推文存储到CSV文件中,并在需要时取出。这是因为我想汇编我收集的推文,然后将它们应用于我的算法以便稍后进行计算。

因此,我考虑尝试

            write.csv(tweets, file = "newfile", row.names = TRUE, sep = ',', col.names = TRUE)

只有创建数据框才能使用 :/。

我收集的推文看起来像这样

 [[1]]
 [1] "anonymous: boring!"

 [[2]]
 [1] "anonymous: random message !"

有什么想法吗?

编辑:my str(tweets) 这只是我刚刚拉出来的3条推文。

List of 3
 $ :Reference class 'status' [package "twitteR"] with 17 fields
  ..$ text         : chr "damn so many thing to settle @@"
  ..$ favorited    : logi FALSE
  ..$ favoriteCount: num 0
  ..$ replyToSN    : chr(0) 
  ..$ created      : POSIXct[1:1], format: "2013-10-11 14:15:59"
  ..$ truncated    : logi FALSE
  ..$ replyToSID   : chr(0) 
  ..$ id           : chr "388669309028798464"
  ..$ replyToUID   : chr(0) 
  ..$ statusSource : chr "web"
  ..$ screenName   : chr "ThisIsNapmi"
  ..$ retweetCount : num 0
  ..$ isRetweet    : logi FALSE
  ..$ retweeted    : logi FALSE
  ..$ longitude    : chr(0) 
  ..$ latitude     : chr(0) 
  ..$ urls         :'data.frame':   0 obs. of  4 variables:
  .. ..$ url         : chr(0) 
  .. ..$ expanded_url: chr(0) 
  .. ..$ dispaly_url : chr(0) 
  .. ..$ indices     : num(0) 
  ..and 50 methods, of which 38 are possibly relevant:
  ..  getCreated, getFavoriteCount, getFavorited, getId, getIsRetweet, getLatitude,
  ..  getLongitude, getReplyToSID, getReplyToSN, getReplyToUID, getRetweetCount, getRetweeted,
  ..  getRetweets, getScreenName, getStatusSource, getText, getTruncated, getUrls, initialize,
  ..  setCreated, setFavoriteCount, setFavorited, setId, setIsRetweet, setLatitude,
  ..  setLongitude, setReplyToSID, setReplyToSN, setReplyToUID, setRetweetCount, setRetweeted,
  ..  setScreenName, setStatusSource, setText, setTruncated, setUrls, toDataFrame,
  ..  toDataFrame#twitterObj
 $ :Reference class 'status' [package "twitteR"] with 17 fields
  ..$ text         : chr "@Neverush @asmafab http://t.co/TOakKW4kyc"
  ..$ favorited    : logi FALSE
  ..$ favoriteCount: num 0
  ..$ replyToSN    : chr "Neverush"
  ..$ created      : POSIXct[1:1], format: "2013-10-11 12:55:04"
  ..$ truncated    : logi FALSE
  ..$ replyToSID   : chr "388647414808051712"
  ..$ id           : chr "388648948111392770"
  ..$ replyToUID   : chr "44332730"
  ..$ statusSource : chr "web"
  ..$ screenName   : chr "ThisIsNapmi"
  ..$ retweetCount : num 0
  ..$ isRetweet    : logi FALSE
  ..$ retweeted    : logi FALSE
  ..$ longitude    : chr(0) 
  ..$ latitude     : chr(0) 
  ..$ urls         :'data.frame':   1 obs. of  5 variables:
  .. ..$ url         : chr "http://t.co/TOakKW4kyc"
  .. ..$ expanded_url: chr "http://www.youtube.com/watch?v=2mjvfnUAfyo"
  .. ..$ display_url : chr "youtube.com/watch?v=2mjvfn…""| __truncated__
  .. ..$ start_index : num 19
  .. ..$ stop_index  : num 41
  ..and 50 methods, of which 38 are possibly relevant:
  ..  getCreated, getFavoriteCount, getFavorited, getId, getIsRetweet, getLatitude,
  ..  getLongitude, getReplyToSID, getReplyToSN, getReplyToUID, getRetweetCount, getRetweeted,
  ..  getRetweets, getScreenName, getStatusSource, getText, getTruncated, getUrls, initialize,
  ..  setCreated, setFavoriteCount, setFavorited, setId, setIsRetweet, setLatitude,
  ..  setLongitude, setReplyToSID, setReplyToSN, setReplyToUID, setRetweetCount, setRetweeted,
  ..  setScreenName, setStatusSource, setText, setTruncated, setUrls, toDataFrame,
  ..  toDataFrame#twitterObj
 $ :Reference class 'status' [package "twitteR"] with 17 fields
  ..$ text         : chr "@Neverush @asmafab nasi lemak bumbung ? ahahahaha"
  ..$ favorited    : logi FALSE
  ..$ favoriteCount: num 0
  ..$ replyToSN    : chr "Neverush"
  ..$ created      : POSIXct[1:1], format: "2013-10-11 12:34:39"
  ..$ truncated    : logi FALSE
  ..$ replyToSID   : chr "388643321108631552"
  ..$ id           : chr "388643810613264384"
  ..$ replyToUID   : chr "44332730"
  ..$ statusSource : chr "web"
  ..$ screenName   : chr "ThisIsNapmi"
  ..$ retweetCount : num 0
  ..$ isRetweet    : logi FALSE
  ..$ retweeted    : logi FALSE
  ..$ longitude    : chr(0) 
  ..$ latitude     : chr(0) 
  ..$ urls         :'data.frame':   0 obs. of  4 variables:
  .. ..$ url         : chr(0) 
  .. ..$ expanded_url: chr(0) 
  .. ..$ dispaly_url : chr(0) 
  .. ..$ indices     : num(0) 
  ..and 50 methods, of which 38 are possibly relevant:
  ..  getCreated, getFavoriteCount, getFavorited, getId, getIsRetweet, getLatitude,
  ..  getLongitude, getReplyToSID, getReplyToSN, getReplyToUID, getRetweetCount, getRetweeted,
  ..  getRetweets, getScreenName, getStatusSource, getText, getTruncated, getUrls, initialize,
  ..  setCreated, setFavoriteCount, setFavorited, setId, setIsRetweet, setLatitude,
  ..  setLongitude, setReplyToSID, setReplyToSN, setReplyToUID, setRetweetCount, setRetweeted,
  ..  setScreenName, setStatusSource, setText, setTruncated, setUrls, toDataFrame,
  ..  toDataFrame#twitterObj

为什么需要一个CSV文件?为什么不只是像writeLines(unlist(tweets), "newfile.txt")这样的东西? - A5C1D2H2I1M1N2O1R2T1
@Ananda Mahto 刚试了一下那个方法,这是我得到的结果: writeLines(unlist(tweets), "newfile.txt")中出现错误:无效的“text”参数。 不太确定我收集的推文是否真的是列表。 - Napmi
1
如果您不打算将文件与 R 以外的任何程序一起使用,那么我强烈建议使用 saveRDSloadRDS。也就是说,将列表保存为其现有的 R 格式,而不是将其转换为 CSV 格式。此外,读写速度可能会更快。 - flodel
哦,我懂了,谢谢,至少我知道了这个函数,我也会尝试一下。 然而,它能够和其他的 saveRDS 文件拼接起来吗? 因为我的整个目的实际上是要压缩我将要收集的推文。 - Napmi
3个回答

11
你可以使用以下内容将推文转换为推文数据框架:
tweets.df <- do.call("rbind", lapply(tweets, as.data.frame)) 

然后在您的write.csv函数中使用tweets.df。


11

虽然没有测试过,但从我在网上读到的内容来看,以下方法应该可行:

  1. Convert the list to a data.frame

    library(plyr) 
    tweets.df = ldply(tweets, function(t) t$toDataFrame())
    
  2. Use write.csv as before, but just on the tweets.df object instead of the tweets object.

    write.csv(tweets.df, file = "newfile.csv")
    

来源: 这里这里。另请参见:?"status-class"


我刚刚发现我实际上可以使用twListToDF(tweets)将推文转换为表格形式。 但我也会尝试您的方法,谢谢! - Napmi
4
@EricHeng,我刚发现这个网页也有相关信息(在此处 http://rfunction.com/archives/2002)。我正准备更新。我建议使用该软件包中的内容,因为它是一部分,很可能是最好的方法。 - A5C1D2H2I1M1N2O1R2T1
但是如果列不匹配,例如某些条目的列比其他条目多怎么办? - Ole Petersen

0
使用 twitteR 包:
将您的推文转换为数据框。
tweets2df <- twListToDF(tweets)

然后将其保存为csv文件

write.csv(tweets2df, file = "tweets.csv")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接