2016-01-20 71 views
0

说我有描述不同物种的丰度,在不同地点的数据集,d1通过从第二数据帧匹配的多个列中查询一个R数据帧

site <- c(1:5) 
species1 <- c('A','A','B','C','A') 
abundance1<- c(0.11,0.45,0.87,1.00,0.23) 
species2 <- c('B','C','A','A','C') 
abundance2 <- 1 - abundance1 
d1<- data.frame(site,species1,abundance1,species2,abundance2) 

所以,每个站点具有两个物种,并且有一个abundance列描述每个物种代表的总社区的比例。

然后我有第二个数据集d2,描述了一个图中每个物种的一些性状测量,例如weight。所以,在积1种A可能有阴谋2.数据帧,d2不同的观察weight比种A,看起来是这样的:

site<- c(1,1,2,2,3,3,4,4,5,5) 
species <- c('A','B','A','C','B','A','C','A','A','C') 
weight <- rnorm(10, 50,4) 
d2<- data.frame(site,species,weight) 

我想内d1生成列,它是丰加权平均值为weight,使用d2中的weight数据,使得在最终计算中,绘图内的每个物种都被赋予它们独特的观察值weight

预期输出新计算矢量的第一项将是函数的输出:

d1[1,3]*d2[1,3] + d1[1,5]*d2[2,3] 
+2

请出示预期输出 – akrun

+0

'D1 [1,4]''是B' – mtoto

+0

@mtoto我已经解决了这个问题,对不起。 – colin

回答

1

老同学R.可与其它包装更简单的方法,但是这很简单apply

d1$newvec <- apply(d1, 1, function(x) 
         d2[d2$site==x[1]&d2$species==x[2],'weight']*as.numeric(x[3]) + 
         d2[d2$site==x[1]&d2$species==x[4],'weight']*as.numeric(x[5])) 
+0

yesssss。非常感谢! – colin

相关问题