【发布时间】:2023-03-11 02:05:01
【问题描述】:
我有非常简单的大观察数据,假设结构如下:
> df = data.frame(ID = c("oak", "birch", rep("oak",2), "pine", "birch", "oak", rep("pine",2), "birch", "oak"),
+ yearobs = c(rep(1998,3), rep(1999,2), rep(2000,3),rep(2001,2), 2002))
> df
ID yearobs
1 oak 1998
2 birch 1998
3 oak 1998
4 oak 1999
5 pine 1999
6 birch 2000
7 oak 2000
8 pine 2000
9 pine 2001
10 birch 2001
11 oak 2002
我想要做的是通过计算每个唯一 ID(本例中的树种)的年份差 (max(yearobs)-min(yearobs)) 来计算年龄。我尝试使用 lubridate + dplyr 包,但是,每个唯一 ID 的观察次数在我的数据中有所不同,我想以最快的方式创建一个年龄列,而不单独存储最小值和最大值(避免在这里循环,因为我的数据很大)。
期望的输出:
ID age
1 oak 4
2 birch 3
3 pine 3
任何建议都将不胜感激。
【问题讨论】:
-
library(dplyr) df <- df %>% group_by(ID) %>% mutate(age = max(yearobs)-min(yearobs))