【问题标题】:Select previous 5 tweets based on one timestamp根据一个时间戳选择前 5 条推文
【发布时间】:2015-10-23 19:57:24
【问题描述】:

我有一个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 并找到属于对应user_idallTweets 的前5 条推文。

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

【问题讨论】:

  • 您实际上是在寻找来自“推文”中所有唯一 user_id 的最新 5 条推文吗?询问是因为看起来一个 user_id 可以在“推文”中出现多次。
  • 没有。由于一个用户可以在“tweets”表中拥有多个创建时间不同的推文,因此我需要根据同一用户的创建时间查找前 5 条推文。

标签: r time difference


【解决方案1】:

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

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

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

  1. 根据 user_id 拆分数据框推文。

    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
  1. 现在,对于每个列表元素,您需要从 数据框 allTweets 仅小于相应值 “created_at”变量。

    -按“created_at”列对所有推文数据框进行排序。
    * 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))

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2013-01-10
    • 2016-01-22
    相关资源
    最近更新 更多