【问题标题】:Calculate total observation days in R (lubridate + dplyr)计算 R 中的总观察天数(lubridate + dplyr)
【发布时间】:2018-08-21 17:23:10
【问题描述】:

我正在使用一个数据集,其中每一行都包含对个人 (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

【问题讨论】:

  • 你是对的!我没有注意到这一点。我在修复该项目的情况下再次运行代码,但同样的问题仍然存在。新列中的数字对于每一行都是相同的。
  • 如果您在计算过程中使用ymd,则不需要data$date &lt;- mdy(data$date)。另外,为什么要在第一年使用mdy

标签: r dplyr lubridate


【解决方案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 

【讨论】:

  • 这应该可以!但由于某种原因,在我的计算机上,“total.activity.days”列中的每一行都得到“6”。
  • str(data) 产生什么?
  • 我刚刚重新安装了每个包并再次重新加载数据,突然它开始工作了!感谢您的帮助!
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多