2015-10-23 210 views
0

選擇前5個鳴叫我有一個tweets表看起來像這樣:基於一個時間戳

tweet_id   tweet_text  user_id created_at 
1 6.127048e+17  asfasfadsfdas  1  2015-06-21 16:33:13 
2 6.128451e+17  adsgfasdgg   1  2015-06-22 15:33:13 
4 6.132484e+17  adgfdasgfadg  2  2015-06-20 17:33:13 
5 6.132562e+17  adgfdagfdag   2  2015-06-19 18:33:13 
6 6.132867e+17  adgfdagfdhgfd  3  2015-06-21 19:33:13 

我也有類似的表稱爲allTweets,其中包括來自所有用戶的tweet。它有這些列:

tweet_id   tweet_text  user_id created_at 

我要循環tweets$tweet_idallTweets屬於相應user_id找到前5個鳴叫。

例如,tweets中的第一條推文屬於user_id 1並且created_at 2015-06-21 16:33:13。根據此時間戳,我必須從allTweets中找出屬於user_id 1的前5條推文。

+0

你基本上是在尋找所有獨特的USER_ID在 「推特」 最近5個鳴叫?詢問,因爲它看起來像一個user_id可以在「tweets」中多次出現。 – JFu

+0

不需要。由於一個用戶可以在表格「tweets」中創建多個推文,這些推文具有不同的創建時間,所以我需要根據來自同一用戶的創建時間查找以前的5條推文。 – cowling

回答

0

讓我重申我對你的要求的理解。您需要:

  1. 遍歷表「鳴叫」每一行(這我假設是 數據幀)。
  2. 對於每一行,請檢查user_id和created_at 時間。
  3. 然後去到餐桌「allTweets」和特定USER_ID,找出前5鳴叫只是早於一步「created_at」該用戶由於時間2

這裏有一種方法要做到這一點:

  1. 根據user_id拆分數據框tweets。

    tweetsList <- split(tweets, tweets$user_id)

這應該得到這種格式的數據:

$1 
[1] tweet_id   tweet_text  created_at 
1 6.127048e+17  asfasfadsfdas  2015-06-21 16:33:13 
2 6.128451e+17  adsgfasdgg   2015-06-22 15:33:13 

$2 
[1] tweet_id   tweet_text  created_at 
4 6.132484e+17  adgfdasgfadg  2015-06-20 17:33:13 
5 6.132562e+17  adgfdagfdag  2015-06-19 18:33:13 
現在
  • ,每個列表元素,你需要找到來自 dataframe allTweets的前5個條目僅比「created_at」變量的相應值 小。

    - 通過「created_at」列刪除所有Twitter數據框。
    * allTweets <- allTweets[order(allTweets$created_at)]

    - 定義一個函數,它將一個向量作爲輸入,並從allTweets中返回我們需要的5個條目。
    * gimme5 <- function(x){tail(allTweets[x["created_at"] > allTweets$created_at, ])}

    - 由於此功能只適用於向量和我們的名單是dataframes的列表,我們需要逐步子集,並應用在我們的dataframes的每一行。
    * apply(*dataframe*, 1, gimme5) #*dataframe* is for each component dataframe in our list

    - 最後,我們希望將我們以前的命令應用於我們列表中的每個數據幀組件。因此,我們希望將其應用於tweetsList [[「1」]],tweetsList [[「2」]]等。這將生成上述代碼的數據幀組件。
    * lapply(tweetsList,函數(x)的申請(X,1,gimme5))