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