通过减去 R 中的年数计算每只动物的年龄
Calculating age per animal by subtracting years in 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
对于最初的困惑,如果我不清楚我需要完成什么,我深表歉意。
如有任何帮助,我们将不胜感激。
如果你想根据一个初始出生年份 1975 年(看起来你就是这样)来计算相对年龄,那么你可以创建一个名为 "RelativeAge" 的新列并设置它等于年份 - 1975
data$RelativeAge = (Year-1975)
然后删除原来的 "Age" 列,或根据需要重命名
完成的事情 "by group" 通常使用 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]
在 base 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)
我想计算动物的相对年龄。对于我的数据集中的每只动物,我需要每年从下一年按顺序减去。因为一只动物在一年内可以有多个繁殖事件,所以我需要那一年剩余事件的年龄(即第一个事件之后的所有事件)与初始计算相同。
更新:
数据集更像这样:
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
对于最初的困惑,如果我不清楚我需要完成什么,我深表歉意。
如有任何帮助,我们将不胜感激。
如果你想根据一个初始出生年份 1975 年(看起来你就是这样)来计算相对年龄,那么你可以创建一个名为 "RelativeAge" 的新列并设置它等于年份 - 1975
data$RelativeAge = (Year-1975)
然后删除原来的 "Age" 列,或根据需要重命名
完成的事情 "by group" 通常使用 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]
在 base 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)