R 汇总日期时间,以汇总在特定条件下花费的时间

R 汇总日期时间,以汇总在特定条件下花费的时间,r,datetime,summary,R,Datetime,Summary,我对该如何进行感到困惑。我有一些虚拟数据如下: Date <- as.POSIXct(c('2018-03-20 11:52:25', '2018-03-22 12:01:44', '2018-03-20 12:05:25', '2018-03-20 12:10:40', '2018-03-20 12:12:51 ')) Sites<-c(4, 4, 4, 6, 7) Individual<-c("A", "A", "A", "B", "B") data.frame(In

我对该如何进行感到困惑。我有一些虚拟数据如下:

 Date <- as.POSIXct(c('2018-03-20 11:52:25', '2018-03-22 12:01:44', '2018-03-20 12:05:25', '2018-03-20 12:10:40', '2018-03-20 12:12:51 ')) 
Sites<-c(4, 4, 4, 6, 7)
Individual<-c("A", "A", "A", "B", "B")

data.frame(Individual, Date, Sites)
对于每个人,我想确定在每个站点花费的时间。是否有一个函数可以根据这两种情况汇总花费的时间?非常感谢您的任何帮助或意见

这个怎么样:

库(tidyverse)
日期#组:个人[2]
#>单个站点花费的时间
#>                
#>1 A 4 2.00647天
#>200万天
#>300万天
由(v0.2.1)创建于2019-03-20

library(data.table)
setDT(DF)

spellDT = DF[, .(StartDate = first(Date)), by=.(Individual, Site = Sites, g = rleid(Sites))]
spellDT[, duration := shift(StartDate, type="lead") - StartDate, by=Individual][]

   Individual Site g           StartDate      duration
1:          A    4 1 2018-03-20 11:52:25       NA mins
2:          B    6 2 2018-03-20 12:10:40 2.183333 mins
3:          B    7 3 2018-03-20 12:12:51       NA mins
或者类似地,在dplyr动词中:

library(dplyr)

DF %>% distinct(Individual, g = data.table::rleid(Sites), .keep_all = TRUE) %>% 
  rename(StartDate = Date, Site = Sites) %>%
  group_by(Individual) %>% mutate(duration = lead(StartDate) - StartDate)

# A tibble: 3 x 5
# Groups:   Individual [2]
  Individual StartDate            Site     g duration     
  <fct>      <dttm>              <dbl> <int> <time>       
1 A          2018-03-20 11:52:25     4     1       NA mins
2 B          2018-03-20 12:10:40     6     2 2.183333 mins
3 B          2018-03-20 12:12:51     7     3       NA mins
库(dplyr)
DF%%>%不同(单个,g=data.table::rleid(站点),.keep_all=TRUE)%%>%
重命名(开始日期=日期,站点=站点)%>%
分组(个体)%>%突变(持续时间=开始时间-开始时间)
#一个tibble:3x5
#团体:个人[2]
单个起始日期站点g持续时间
1A 2018-03-20 11:52:25 41分钟
2B 2018-03-20 12:10:40 62.183333分钟
3b 2018-03-20 12:12:51 7 3分钟

在这种情况下,您只有足够的信息说明B在站点6停留了多长时间,对吗?(对于另外两个单独的站点法术,你看不到它们何时结束,我的意思是。)是的,你是对的!我应该包括每个人的开始/结束日期,而不是只包括一个时间点。这正是我想要的!谢谢
library(dplyr)

DF %>% distinct(Individual, g = data.table::rleid(Sites), .keep_all = TRUE) %>% 
  rename(StartDate = Date, Site = Sites) %>%
  group_by(Individual) %>% mutate(duration = lead(StartDate) - StartDate)

# A tibble: 3 x 5
# Groups:   Individual [2]
  Individual StartDate            Site     g duration     
  <fct>      <dttm>              <dbl> <int> <time>       
1 A          2018-03-20 11:52:25     4     1       NA mins
2 B          2018-03-20 12:10:40     6     2 2.183333 mins
3 B          2018-03-20 12:12:51     7     3       NA mins