Расчет возраста одного животного путем вычитания лет в R

Я рассчитываю рассчитать относительный возраст животных. Мне нужно последовательно вычитать каждый год из следующего для каждого животного в моем наборе данных. Поскольку животное может иметь несколько репродуктивных событий в год, мне нужно, чтобы возраст оставшихся событий в этом году (т. Е. Всех событий после первого) был таким же, как первоначальный расчет.

Обновить:

Набор данных больше похож на это:

  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 ответа

Решение

Вещи, сделанные "по группам", как правило, легче всего сделать, используя dplyr или же data.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)

Если вы пытаетесь определить относительный возраст на основе одного начального года рождения 1975 года (который, по-видимому, похож на вас), то вы можете просто создать новый столбец под названием "RelativeAge" и установить его равным году - 1975

data$RelativeAge = (Year-1975)

затем просто избавьтесь от исходного столбца "Возраст" или переименуйте по необходимости

Другие вопросы по тегам