2017-01-26 10 views
1

私はユーザーと訪問日のデータフレームを持っています。私はグループごとの訪問の平均時間差を見出そうとしています。 出力は一日の日または画分になり2つの日付の平均時間差PERグループ

require(lubridate) 
so <- data.frame(visit_dates = c("12/4/2016","12/6/2016","12/7/2016","12/3/2016","12/7/2016","12/10/2016"), person = c("1","1","1","2","2","2")) 


so$visit_dates <- mdy(format(as.POSIXct(strptime(so$visit_dates,"%m/%d/%Y",tz = "")),format = "%m/%d/%Y")) 

のようなものになります出力:

person avgTimeBetweenVisit 
1     2.5 
2     3.5 

答えて

1

data.table試してみてください。

require(lubridate) 
require(data.table) 
so <- data.frame(visit_dates = c("12/4/2016","12/6/2016","12/7/2016","12/3/2016","12/7/2016","12/10/2016"), person = c("1","1","1","2","2","2")) 


so$visit_dates <- mdy(format(as.POSIXct(strptime(so$visit_dates,"%m/%d/%Y",tz = "")),format = "%m/%d/%Y")) 
so <- data.table(so, key = c("person", "visit_dates")) 
res <- so[, .(avgTimeBetweenVisit = mean(diff(visit_dates))), by = person] 
print(res) 
# person avgTimeBetweenVisit 
# 1:  1   1.5 days 
# 2:  2   3.5 days 
0

をそのことについては何:そのリンクはで私を助け

so %>% 
    group_by(person)%>% 
    mutate(Difference = visit_dates - lag(visit_dates)) %>% 
    summarize(mean_time = mean(Difference, na.rm=TRUE)) 

'diff'の問題。 diff operation within a group, after a dplyr::group_by()

+0

は答えてくれてありがとうしかし、人のためには、常に順番になりません。 – daveDo

+0

私はそれを正しく理解しているかどうかは不明ですが、 'group_by'では順序は関係ありません。 – sluedtke