Select 基于一个时间戳的前 5 条推文

Select previous 5 tweets based on one timestamp

我有一个 tweets table 看起来像这样:

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

我也有一个类似的 table,叫做 allTweets,其中包括来自所有用户的所有推文。它有这些列:

tweet_id          tweet_text       user_id    created_at

我想遍历 tweets$tweet_id 并从 allTweets 中找到属于相应 user_id.

的前 5 条推文

例如,tweets 中的第一条推文属于 user_id 1,并且是 created_at 2015-06-21 16:33:13。我必须根据这个时间戳从 allTweets 中找出属于 user_id 1 的前 5 条推文。

让我重申一下我对您所问内容的理解。您需要:

  1. 遍历 table "tweets" 的每一行(我假设是 数据框)。
  2. 对于每一行,检查 user_id 和 created_at 时间.
  3. 然后转到 table "allTweets" 并针对特定的 user_id,找出刚好早于 "created_at" 给出的时间的前 5 条推文第 2 步中的用户。

这是解决此问题的一种方法:

  1. 根据 user_id.

    拆分数据帧推文

    tweetsList <- split(tweets, tweets$user_id)

这应该以这种格式获取您的数据:

  
[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  


[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
  1. 现在,对于每个列表元素,您需要从中找到前 5 个条目 dataframe allTweets 仅小于各自的值 "created_at" 个变量。

    -按 "created_at" 列对所有推文数据框进行排序。
    * allTweets <- allTweets[order(allTweets$created_at)]

    -定义一个函数,该函数将一个向量作为输入,returns 我们需要从 allTweets 中获取的 5 个条目。
    * gimme5 <- function(x){tail(allTweets[x["created_at"] > allTweets$created_at, ])}

    -由于此函数仅适用于向量,而我们的列表是数据帧列表,因此我们需要逐步子集化并应用于数据帧的每一行。
    * apply(*dataframe*, 1, gimme5) #*dataframe* is for each component dataframe in our list

    -最后,我们要对列表中的每个数据框组件应用我们之前的命令。因此,我们想将其应用于 tweetsList[["1"]]、tweetsList[["2"]] 等。这将生成上述代码的 dataframe 组件。
    * lapply(tweetsList, function(x) apply(x, 1, gimme5))