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