根据一个时间戳选择之前的5条推文

时间:2015-10-23 19:57:25

标签: r time difference

我有一个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_id          tweet_text       user_id    created_at

我想循环遍历tweets$tweet_id并找到allTweets中属于相应user_id的前5条推文。

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

1 个答案:

答案 0 :(得分:0)

让我重申一下我对你的要求的理解。你需要:

  1. 迭代每一行表“推文”(我假设是一个 数据帧)。
  2. 对于每一行,请检查user_id和created_at     时间。
  3. 然后转到表“allTweets”,对于特定的user_id,找出比步骤2中该用户的“created_at”给出的时间早的前5条推文。
  4. 这是解决这个问题的一种方法:

    1. 根据user_id分割数据帧推文。

      tweetsList <- split(tweets, tweets$user_id)

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

      $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
      
      1. 现在,对于每个列表元素,您需要查找前5个条目 dataframe allTweets只是小于相应的值 “created_at”变量。

        - 按“created_at”列排序allTweets数据框     * allTweets <- allTweets[order(allTweets$created_at)]

        - 定义一个以向量作为输入的函数,并从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))