0

我正在寻找计算动物的相对年龄。对于我的数据集中的每只动物,我需要每年从下一个中依次减去。因为一只动物在一年内可以有多个生殖事件,所以我需要该年剩余事件(即第一个事件之后的所有事件)的年龄与初始计算相同。

更新:

数据集更像这样:

  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 

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

任何帮助将不胜感激。

4

2 回答 2

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)
于 2018-01-26T20:24:48.420 回答
1

如果您想根据一个初始出生年份 1975 年(看起来像您)来计算相对年龄,那么您可以创建一个名为“RelativeAge”的新列并将其设置为等于年份 - 1975 年

data$RelativeAge = (Year-1975)

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

于 2018-01-26T20:21:15.133 回答