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 条推文。
让我重申一下我对您所问内容的理解。您需要:
- 遍历 table "tweets" 的每一行(我假设是
数据框)。
- 对于每一行,检查 user_id 和 created_at
时间.
- 然后转到 table "allTweets" 并针对特定的 user_id,找出刚好早于 "created_at" 给出的时间的前 5 条推文第 2 步中的用户。
这是解决此问题的一种方法:
根据 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
现在,对于每个列表元素,您需要从中找到前 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))
我有一个 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
.
例如,tweets
中的第一条推文属于 user_id 1
,并且是 created_at 2015-06-21 16:33:13。我必须根据这个时间戳从 allTweets
中找出属于 user_id 1
的前 5 条推文。
让我重申一下我对您所问内容的理解。您需要:
- 遍历 table "tweets" 的每一行(我假设是 数据框)。
- 对于每一行,检查 user_id 和 created_at 时间.
- 然后转到 table "allTweets" 并针对特定的 user_id,找出刚好早于 "created_at" 给出的时间的前 5 条推文第 2 步中的用户。
这是解决此问题的一种方法:
根据 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
现在,对于每个列表元素,您需要从中找到前 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))