如何检查R中属于特定类别的观测条件?

时间:2014-06-27 13:14:18

标签: r twitter

如果问题令人困惑,我很抱歉,我找不到更好的表达方式。

创建推文时,我有一个包含推文,用户ID和日期的数据集。

userid            tweet         date
1132622143        bla bla       2014-04-23
1132622143        bla bla       2014-05-23
1132622143        ...           ...
1132622143
1132622145

我想制作此数据集的一个子集,其中包含最近在Twitter上发布内容的用户的数据,例如5月或更晚,因此对于至少有一条推文的用户,其中日期> 2014-05-01(我希望在我的新数据集中为这些活跃用户提供所有最近和旧的推文。)

我想我需要创建一个类似这样的函数:

for each distinct userid
    find all rows with same userid value and put them in a list
    for each row in a list
        if there exists a row where date>2014-05-01
    select all rows for this userid

我不确定这是否是正确的逻辑,如果是,那么如何实际编程。我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

ave可以在这里使用。

以下是您的问题的概括,您可以希望扩展到您的实际数据。

首先,一些样本数据。我假设您知道如何将“日期”变量转换为实际的时间/日期变量。

mydf <- data.frame(
  id = c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4),
  text = c("a", "b", "c", "a", "b", "c", "d", "e", "a", "b", "c", "a"),
  time = c(1, 1, 2, 2, 3, 4, 4, 5, 3, 5, 5, 1)
)

使用ave,您可以按组创建逻辑向量。在这里,我们检查在每组“id”中是否有任何“时间”大于或等于4。如果有,则为“id”的所有行返回TRUE

该信息可以直接用于提取那些相关的行。

as.logical(with(mydf, ave(time, id, FUN = function(x) any(x > 4))))
#  [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
mydf[as.logical(with(mydf, ave(time, id, FUN = function(x) any(x > 4)))), ]
#    id text time
# 4   2    a    2
# 5   2    b    3
# 6   2    c    4
# 7   2    d    4
# 8   2    e    5
# 9   3    a    3
# 10  3    b    5
# 11  3    c    5