我有以下有关服务使用的数据集。允许人们签入和退出服务,因此输入的服务日期和剩余的服务日期。在另一个场合,他们可能会再次进入服务,并在几天后离开。
我希望能够知道一个人对服务的每次使用(由一行代表),他/她在过去一年中使用该服务的次数是多少。
我计算了一个服务使用索引来表示服务使用的第n次。接下来,我使用索引来计算自上次服务使用以来的天数。从那以后我就被困住了。我不确定如何回顾。
我很困惑,并会感谢有关如何继续的任何提示。我想使用lapply
将每个人分配到自己的数据框中,但之后我该如何回顾?
感谢。
read.table("http://dl.dropbox.com/u/822467/dataset.csv", sep = ",", header = TRUE)
以下是来自主题22的数据。该主题总共有5个服务使用。对于每个服务使用没有第一个,我会回顾他进入服务之前的1年。例如。对于服务的第二次使用,我会查看输入日期,即14/08/2009
。然后,我会查看之前的服务用法,以查看有多少属于15/08/2008 to 14/08/2009
之间的窗口。我需要为每个主题的所有服务使用实例执行此操作。
SubID Entered_Service Left_Service Service_Usage_Index Days_Since_Last_Service_Use_Ended
22 09/06/2008 13/06/2008 1 NA
22 14/08/2009 17/08/2009 2 427
22 21/03/2010 22/03/2010 3 216
22 25/03/2010 31/03/2010 4 3
22 21/06/2010 24/06/2010 5 82
答案 0 :(得分:0)
这不是最优雅的解决方案,但我会按照以下步骤(如果我理解你的问题):
data <- read.table("http://dl.dropbox.com/u/822467/dataset.csv", sep = ",", header = TRUE)
# first, define your dates as dates so you can compare them
strptime(data[,2],format="%d/%m/%Y") -> entry
strptime(data[,3],format="%d/%m/%Y") -> exit
strptime("31/12/2011",format="%d/%m/%Y") -> end
strptime("01/01/2011",format="%d/%m/%Y") -> start
# then select all rows from 2011
data[(entry<=end & entry>=start) | (exit<=end & exit>=start),] -> data2011
# then see how many rows correspond to each user ID
summary(as.factor(data2011$SubID))
修改强>
基于同样的想法,我希望它能做到这一点:
data <- read.table("http://dl.dropbox.com/u/822467/dataset.csv", sep = ",", header = TRUE)
data[!is.na(data[,1]),]->data
result <- rep(NA,length=nrow(data))
for(i in unique(data$SubID)){
# Loop through each subject
data[data$SubID==i,]->temp
if(nrow(temp)>1){
for(j in 2:nrow(temp)){
strptime(temp[j,2],format="%d/%m/%Y") -> end
end - 365*24*3600 -> start
# There might be a better way to substract a year to a date but I don't know it...
strptime(temp[,2],format="%d/%m/%Y") -> entry
strptime(temp[,3],format="%d/%m/%Y") -> exit
nrow(temp[(entry<end & entry>=start) | (exit<end & exit>=start),]) -> result[data$SubID==i & data[,2]==temp[j,2]]
}
}
}
result -> data$result