计算 R 中的总观察天数(lubridate + dplyr)

Calculate total observation days in R (lubridate + dplyr)

我正在处理一个数据集,其中每一行都包含对个人 (ID) 的单独观察。我希望 R 查找第一个和最后一个观察日期并计算 "activity days" 的总数,将这些值放在一个新列中。当我 运行 下面的代码时,我得到一列,每个条目都有相同的数字 — 整个数据集最早和最晚日期之间的总天数,而不是每个人。

我正在使用 dplyr 和 lubridate。我将此页面 (difference between the first date and last date within same individual in R) 用于代码帮助,但它对我不起作用。

谁能帮我弄清楚哪里出错了?

data$date <- mdy(data$date)

data <- data %>% 
  group_by(ID) %>% 
  mutate(total.activity.days = max((date)) - min((date)))

   cage   date              ID   total.activity.days
1   1     2018-04-30        40   54
2   1     2018-04-30        76   54 
3   1     2018-05-02        40   54 
4   1     2018-05-02        76   54
5   1     2018-05-04        40   54
6   1     2018-05-04        76   54
7   1     2018-04-28        59   54
8   1     2018-04-29        59   54

试试这个:

data_new <- data %>% 
    group_by(ID) %>% 
    summarise(MaxDate = max(date),
              MinDate = min(date)) %>% 
    mutate(total.activity.days = MaxDate - MinDate) %>% 
    select(ID, total.activity.days)

只需要:

df %>% group_by(ID) %>% mutate(total.activity.days = max(date) - min(date) )

给出:

cage    date          ID total.activity.days
  <int> <date>     <int> <time>             
1     1 2018-04-30    40 4                  
2     1 2018-04-30    76 4                  
3     1 2018-05-02    40 4                  
4     1 2018-05-02    76 4                  
5     1 2018-05-04    40 4                  
6     1 2018-05-04    76 4                  
7     1 2018-04-28    59 1                  
8     1 2018-04-29    59 1