我有一个如下所示的数据框:
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个条目。
答案 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