计算以R为单位的总观察天数(lubridate + dplyr)

时间:2018-08-21 17:23:10

标签: r dplyr lubridate

我正在使用一个数据集,其中每一行包含一个单独的个体(ID)观察值。我希望R查找第一个和最后一个观察日期,并计算“活动天数”的总数,并将这些值放在新列中。当我运行下面的代码时,我将获得一列,每个条目都使用相同的编号-整个数据集最早到最近几天之间的总天数,而不是每个人的总天数。

我正在使用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

2 个答案:

答案 0 :(得分:1)

尝试一下:

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

答案 1 :(得分:1)

所有需要的是:

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