我有一个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条推文。
答案 0 :(得分:0)
让我重申一下我对你的要求的理解。你需要:
这是解决这个问题的一种方法:
根据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
现在,对于每个列表元素,您需要查找前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))