【问题标题】:Calculating age per animal by subtracting years in R通过减去 R 中的年数来计算每只动物的年龄
【发布时间】:2018-07-06 05:43:38
【问题描述】:

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

更新:

数据集更像这样:

  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 

如果我不清楚我需要完成什么,对于最初的困惑表示歉意。

任何帮助将不胜感激。

【问题讨论】:

  • 阅读split-apply-combine范式。每当您有具有特定 ID 的多行数据时(即长格式)。
  • 会做的,谢谢你的帮助。
  • ..并查看dplyr 和/或data.table 包(以及后来的tidyverse)的介绍。这是 R 中最大的范例之一。它非常强大。

标签: r split-apply-combine


【解决方案1】:

使用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)

【讨论】:

  • 当我尝试运行 library(dplyr) your_data %>% group_by(ID) %>% # group by ID mutate(Age = Year - min(Year)) #在 mutate_impl(.data, dots) 中添加新列错误:列 Age 的长度必须为 84(组大小)或一,而不是 7664
  • 嗯,它适用于样本数据。 (你可以让它工作,对吗?试试我问题底部的数据。)那么你的数据有什么不同呢?列名的拼写方式是否相同?你确定Age 是大写的吗?您的工作区中是否还有另一个名为 Age 的对象,长度为 7664?
  • 请不要告诉我你使用了attach。如果是这样,请立即detach(),并且永远不要再使用attach()
  • 工作非常抱歉造成混乱。非常感谢。
  • 另外,你对 attach() 的厌恶是什么?
【解决方案2】:

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

data$RelativeAge = (Year-1975)

然后去掉原来的“年龄”列,或者根据需要重命名

【讨论】:

  • 欢迎来到本站! OP 的例子不是很清楚,但我确实认为他们想对数据框中的每个 ID 值执行此操作,这些 ID 值可能具有不同的 Year 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多