R中观测数据的年龄计算

DSA*_*DSA 4 r dataframe

我假设有非常简单的大观测数据,结构如下:

> 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
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过计算max(yearobs)-min(yearobs)每个唯一ID(在此示例中为树种)的年()之间的差来计算年龄。我尝试使用lubridate+ dplyr软件包,但是,每个唯一ID的观察值在我的数据中会有所不同,因此我想以最快的方式创建一个年龄列,而不必分别存储最小值和最大值(在这里请循环,因为我的数据是巨大)。

所需的输出:

     ID age
1   oak   4
2 birch   3
3  pine   3
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激。

sin*_*dur 6

在基数R中,您可以执行以下操作:

aggregate(yearobs ~ ID, data = df, FUN = function(x) max(x) - min(x))
#      ID yearobs
# 1 birch       3
# 2   oak       4
# 3  pine       2
Run Code Online (Sandbox Code Playgroud)

  • 击败我。我的功能应该是`function(x)diff(range(x))`。 (4认同)