r - R中观察数据的年龄计算
问题描述
我有非常简单的大观察数据,假设结构如下:
> df = data.frame(ID = c("oak", "birch", rep("oak",2), "pine", "birch", "oak", rep("pine",2), "birch", "oak"),
+ yearobs = c(rep(1998,3), rep(1999,2), rep(2000,3),rep(2001,2), 2002))
> df
ID yearobs
1 oak 1998
2 birch 1998
3 oak 1998
4 oak 1999
5 pine 1999
6 birch 2000
7 oak 2000
8 pine 2000
9 pine 2001
10 birch 2001
11 oak 2002
我想要做的是通过计算max(yearobs)-min(yearobs)
每个唯一 ID(本例中的树种)的年份( )之间的差异来计算年龄。我尝试使用lubridate
+dplyr
包,但是,每个唯一 ID 的观察次数在我的数据中有所不同,我想以最快的方式创建一个年龄列,而不单独存储最小值和最大值(避免循环,因为我的数据是巨大的)。
期望的输出:
ID age
1 oak 4
2 birch 3
3 pine 3
任何建议将不胜感激。
解决方案
在基础 R 中,您可以执行以下操作:
aggregate(yearobs ~ ID, data = df, FUN = function(x) max(x) - min(x))
# ID yearobs
# 1 birch 3
# 2 oak 4
# 3 pine 2
推荐阅读
- laravel - 我的 Laravel 应用程序加载时间很慢
- visual-studio-code - VS code 无法激活某些设置和功能
- amazon-web-services - AWS 中的“每个账户每个区域”是什么意思
- amazon-web-services - 如何添加新的 Prometheus 目标
- ios - 从 Xcode 11 获取主从应用程序模板?
- javascript - 使用 Bixolon 热敏收据打印机 javascript SDK 以英语以外的其他语言打印
- linux - ffplay不能播放mp4视频,但是mpv可以
- git - 在 VS2019 中,从项目中排除了拉取的文件
- react-native - 不同导航器中的反应导航深度链接
- linux - 如何编写用于获取公共 IP 地址的 Bash 脚本,当一个命令失败时,它必须执行另一个命令