仅选择所有时间段的案例

时间:2011-02-08 18:47:48

标签: r

我有一个月的纵向数据集,其中有一些用户损耗。

我想仅为那些在30天内活跃的用户分配数据,但我找不到此类子集的示例。以下是数据布局的示例:

date          userID       x
2001-11-08    1            20
2001-11-08    2            2
2001-11-08    3            10
2001-11-08    4            5
2001-11-08    5            1
2001-11-09    1            19
2001-11-09    3            4
2001-11-09    4            5
...
2001-11-30    1            15

4 个答案:

答案 0 :(得分:2)

subset(dnow, ave(as.numeric(date), userID, FUN=function(x) length(unique(x)))==30)

答案 1 :(得分:2)

您应该考虑使用plyr库中的数据处理工具。

library(plyr)

startdate <- ISOdate(2011, 1, 1)
userdata <- data.frame(
        date = startdate + rep(1:31, each=3),
        userID = 1 + round(9*runif(93)),
        x = round(100*runif(93))
)

summary <- ddply(userdata, .(userID), summarize, activedays=length(date))
summary[summary$activedays >= 30, ]

您可以在Hadley的优秀网站上找到更多关于plyr的信息:http://had.co.nz/plyr/

答案 2 :(得分:2)

我会使用ave来确定每个用户每月有效的天数。

Data$activeDays <- ave(Data$userID, Data$userID, FUN=length)
Data[ Data$activeDays >= 30, ]

如果您的数据集包含多个月,那将会更棘手......

答案 3 :(得分:-1)

which(tapply(userdata$date, userdata$userID, length) == 30)