r - 两年值之间的比率
问题描述
我有一个带有值列和相应年份的数据框。我想创建一个额外的列,该列应包含以 5 年为间隔的年份的价值比率。前任。如果年份是 2000 年,“newval”列应该具有 2000 年和 1995 年值的比率。我的数据框看起来像。可能缺少年份,并且 value 和 year 列中都没有数据。
df2 = data.frame(code = c("AFG", "AGO", "ALB", "AND", "ARB", "ARE", "ARG", "ARM", "ASM", "ATG", "AUS", "AUT","AUT"),
val = c(123, 42, 23, 5, 42, 4, 23, 25, 42, 23, NA, 5563,56),
Year = c(1990, 1991, 1992, 1993, 1991, 1995, 1996, 1997, 1991, 1992, 2000, 2001,2002))
最终数据集应如下所示
df2 = data.frame(code = c("AFG", "AGO", "ALB", "AND", "ARB", "ARE", "ARG", "ARM", "ASM", "ATG", "AUS", "AUT","AUT"),
val= c(123, 42, 23, 5, 42, 4, 23, 25, 42, 23, NA, 5563,56),
Year = c(1990, 1991, 1992, 1993, 1991, 1995, 1996, 1997, 1991, 1992, 2000, 2001,2002), newval=c(NA,NA,NA,NA,NA,0.032520325,0.547619048,1.086956522,NA,NA,NA,241.8695652,2.24))
解决方案
在基础 R 中,我们可以使用match
df2$new_val <- with(df2, val/val[match(Year - 5, Year)])
df2
# code val Year new_val
#1 AFG 123 1990 NA
#2 AGO 42 1991 NA
#3 ALB 23 1992 NA
#4 AND 5 1993 NA
#5 ARB 42 1991 NA
#6 ARE 4 1995 0.0325
#7 ARG 23 1996 0.5476
#8 ARM 25 1997 1.0870
#9 ASM 42 1991 NA
#10 ATG 23 1992 NA
#11 AUS NA 2000 NA
#12 AUT 5563 2001 241.8696
#13 AUT 56 2002 2.2400
推荐阅读
- raspberry-pi - Raspberry Pi SPI 故障 - 返回不正确的位
- python - 从列表中减去值,收到“生成器对象不可下标”错误
- java - 数据未插入 Firebase 实时数据库抛出 Android
- php - 新 PHP8 中的致命错误“与 PDO::query 兼容”
- javascript - 如何从 URL 参数复制到 HTML
- python - 在数据帧的重复行中查找中值的最接近值
- python - 使列数据框成为sql查询语句
- html - 如何制作像在 Instagram 中实现的图像库?(所有图片大小相同)
- php - 获取一组获取的字段值的计数 - MySQL / PHP
- c++ - stl向量和队列的效率