通过减去R中的年数来计算每只动物的年龄

时间:2018-01-26 20:14:50

标签: r split-apply-combine

我希望计算动物的相对年龄。我需要每年从我的数据集中为每只动物顺序减去。因为动物一年内可能有多个生殖事件,所以我需要该年剩余事件的年龄(即第一个之后的所有事件)与初始计算相同。

更新

数据集更类似于:

  Year ID Age 

1 1975 6  -1   
2 1975 6  -1   
3 1976 6  -1   
4 1977 6  -1   
6 1975 9  -1   
8 1978 9  -1 

我需要它看起来像这样

  Year ID Age 

1 1975 6  0   
2 1975 6  0   
3 1976 6  1   
4 1977 6  2   
6 1975 9  0   
8 1978 9  3 

如果我不清楚自己需要完成什么,请为最初的混淆道歉。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

使用dplyrdata.table

,通过群组完成的事情通常最容易做到
library(dplyr)
your_data %>%
  group_by(ID) %>%               # group by ID
  mutate(Age = Year - min(Year)) # add new column

library(data.table)
setDT(your_data) # convert to data table

            # add new column         by group
your_data[, Age := Year - min(Year), by = ID]

在基数R中,ave可能最容易为现有数据添加分组列:

your_data$Age = with(your_data, ave(Year, ID, function(x) x - min(x)))

但语法不如上面的选项好。

您可以测试这些数据:

your_data = read.table(text = "  Year ID Age 
1 1975 6  -1   
2 1975 6  -1   
3 1976 6  -1   
4 1977 6  -1   
6 1975 9  -1   
8 1978 9  -1 ", header = T)

答案 1 :(得分:1)

如果你试图根据1975年的一个初生年份(看起来像你)来计算出相对年龄,那么你可以创建一个名为" RelativeAge"并将其设定为1975年的年份

data$RelativeAge = (Year-1975)

然后摆脱原来的"年龄"列,或根据需要重命名