2017-10-31 5 views
-1

私は以下のようなデータセットを持っていますが、ただ、Rに次のコードをコピーして貼り付けます。参加者1人あたりの訪問数をRで予約した時間を考慮して、どのようにして訪問数を得ることができますか

d <- structure(list(id = c(33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L), VisitDate = c("10/12/14", "10/12/14", "10/13/14", "10/14/14", "11/7/14", "11/7/14", "11/8/12", "11/8/14", "11/9/12", "4/17/13", "5/29/15", "10/26/12", "10/29/12", "11/7/13", "2/15/17", "2/9/15", "3/6/17", "3/7/13", "4/8/16", "4/8/16", "7/28/14", "9/14/12", "9/18/15", "9/18/15"), VisitHours = c(13L, 15L, 10L, 11L, 10L, 9L, 13L, 11L, 11L, 22L, 9L, 16L, 14L, 10L, 11L, 10L, 9L, 14L, 13L, 14L, 13L, 10L, 10L, 14L)), .Names = c("id", "VisitDate", "VisitHours"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -24L), spec = structure(list(cols = structure(list(id = structure(list(), class = c("collector_integer", "collector")), VisitDate = structure(list(), class = c("collector_character", "collector")), VisitHours = structure(list(), class = c("collector_integer", "collector"))), .Names = c("id", "VisitDate", "VisitHours")), default = structure(list(), class = c("collector_guess", "collector"))), .Names = c("cols", "default"), class = "col_spec")) 

をここでは、別のアポイントメントまたは異なる日付と時刻の訪問を持っていたIDS 33と45との2人の参加者があります。基本的に、各VisitDateは1回の訪問とみなされます。ただし、同じ日のVisitHoursとの差が3以上の場合を除きます.3より小さい場合は、1回の訪問としてカウントします。

まず、訪問回数をカウントする変数を取得します。たとえば、参加者33の場合、10/12/14の日に2回の訪問があったが、これらはお互いに非常に接近していた(13人が1人、もう1人が15人、VisitHoursコラムを参照)。 1回の訪問として。一方、参加者45は9/18/15に2回訪問し、これらは互いに遠く離れていた(10人に1人、14人でもう1人、VisitHoursコラムを参照)。したがって、これらの訪問は、同じ日にVisitHours間の差が等しいか、これがどのように見えるべきかの例として、以下のデータフレームを参照してください。3.よりも大きいため、同じ日に:終わり

structure(list(id = c(33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L), VisitDate = c("10/12/14", "10/12/14", "10/13/14", "10/14/14", "11/7/14", "11/7/14", "11/8/12", "11/8/14", "11/9/12", "4/17/13", "5/29/15", "10/26/12", "10/29/12", "11/7/13", "2/15/17", "2/9/15", "3/6/17", "3/7/13", "4/8/16", "4/8/16", "7/28/14", "9/14/12", "9/18/15", "9/18/15"), VisitHours = c(13L, 15L, 10L, 11L, 10L, 9L, 13L, 11L, 11L, 22L, 9L, 16L, 14L, 10L, 11L, 10L, 9L, 14L, 13L, 14L, 13L, 10L, 10L, 14L), CountVisits = c(1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L)), .Names = c("id", "VisitDate", "VisitHours", "CountVisits"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -24L), spec = structure(list(cols = structure(list(id = structure(list(), class = c("collector_integer", "collector")), VisitDate = structure(list(), class = c("collector_character", "collector")), VisitHours = structure(list(), class = c("collector_integer", "collector")), CountVisits = structure(list(), class = c("collector_integer", "collector"))), .Names = c("id", "VisitDate", "VisitHours", "CountVisits")), default = structure(list(), class = c("collector_guess", "collector"))), .Names = c("cols", "default"), class = "col_spec")) 

、私はちょうど1行をしたいです各参加者と前のデータフレームで計算された訪問の合計のために:

d1 <- structure(list(id = c(33L, 45L), CountAllVisits = c(8L, 12L)), .Names = c("id", "CountAllVisits"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -2L), spec = structure(list(cols = structure(list(id = structure(list(), class = c("collector_integer", "collector")), CountAllVisits = structure(list(), class = c("collector_integer", "collector"))), .Names = c("id", "CountAllVisits")), default = structure(list(), class = c("collector_guess", "collector"))), .Names = c("cols", "default"), class = "col_spec")) 

ありがとうございました!

答えて

0
library(tidyverse) 

d %>% 
    group_by(id, VisitDate) %>% 
    arrange(id, VisitDate, VisitHours) %>% 
    mutate(visit_diff = VisitHours - lag(VisitHours)) %>% 
    ungroup() %>% 
    # make NAs greater than 3 so they don't get dropped in next step 
    mutate(visit_diff = ifelse(is.na(visit_diff), 99999, visit_diff)) %>% 
    # drop all visits with difference < 3 hours 
    filter(visit_diff > 2) %>% 
    group_by(id) %>% 
    summarise(count = n()) 
関連する問題