使用查找表R标准化数据

时间:2016-04-20 15:58:04

标签: r dataframe

我有一个如下所示的数据框:

COMM    YEAR    PRODUCE
Apple   2001    3
Mango   2001    5
Apple   2002    7
Mango   2002    2
Apple   2003    1
Mango   2003    9

我还有一个年度生产数据框:

Year Total.Produce
2001 10
2002 13
2003 14

我想在第一个数据框中添加一个新列,其中包含每年每个项目的规范化生产:

COMM    YEAR    PRODUCE  Normalized.Produce
Apple   2001    3        3/10
Mango   2001    5        5/10
Apple   2002    7        7/13
Mango   2002    2        2/13
Apple   2003    9        9/14
Mango   2003    2        2/14

最有效的R方式是什么? 我的表包含大约100,000个条目。

2 个答案:

答案 0 :(得分:1)

只需使用match即可获得匹配的行:

R> match(dd1$YEAR, dd2$Year)
[1] 1 1 2 2 3 3

然后只使用标准的矢量化命令:

dd1$normalise = dd1$PRODUCE/dd2$Total.Produce[match(dd1$YEAR, dd2$Year)]

答案 1 :(得分:1)

也可以使用merge功能。

d1 <- read.table(text=
"COMM    YEAR    PRODUCE
Apple   2001    3
Mango   2001    5
Apple   2002    7
Mango   2002    2
Apple   2003    1
Mango   2003    9", head=T, as.is=T)

d2 <- read.table(text="Year Total.Produce
2001 10
2002 13
2003 14", head=T, as.is=T)

d3 <- merge(d1, d2, by.x="YEAR", by.y="Year")
d3$Normalized.Produce <- d3$PRODUCE/d3$Total.Produce
#   YEAR  COMM PRODUCE Total.Produce Normalized.Produce
# 1 2001 Apple       3            10         0.30000000
# 2 2001 Mango       5            10         0.50000000
# 3 2002 Apple       7            13         0.53846154
# 4 2002 Mango       2            13         0.15384615
# 5 2003 Apple       1            14         0.07142857
# 6 2003 Mango       9            14         0.64285714