我有一个月的纵向数据集,其中有一些用户损耗。
我想仅为那些在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
答案 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)