0

サービスの利用に関する以下のデータセットがあります。人々はサービスのチェックインとチェックアウトを許可されているため、サービス開始日とサービス終了日があります。さらに別の機会に、彼らは再びサービスを開始し、数日後にサービスを終了する可能性があります.

ある人がサービスを利用するたびに (行で表される)、その人が前年度に何回サービスを利用したかを知りたいです。

私が試したこと

サービスが n 回使用されたことを示すために、サービス使用指数を計算しました。次に、インデックスを使用して、前回のサービス使用からの日数を計算しました。そこから私は立ち往生しています。振り返ってどうしたらいいのかわからない。

私はかなり立ち往生しており、続行する方法についてのヒントをいただければ幸いです。lapply各人を独自のデータフレームにサブセット化するために使用したかったのですが、その後どのように振り返ればよいでしょうか?

ありがとう。

データセット

read.table("http://dl.dropbox.com/u/822467/dataset.csv", sep = ",", header = TRUE)

必要なものをさらに説明するには

以下は、サブジェクト 22 のデータです。サブジェクトは合計 5 つのサービスを使用しています。1回目以降のサービス利用ごとに、サービス開始までの1年間を振り返ってみます。たとえば、サービスの 2 回目の使用については、エントリの日付を確認します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
4

1 に答える 1

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
于 2012-06-29T09:51:02.827 に答える