通过匹配第二个数据帧中的多个列来查询一个R数据帧

时间:2016-01-20 15:15:43

标签: r

假设我有一个描述不同物种丰富度的数据集,d1

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中的物种A有weight的不同观察。数据帧d2看起来像这样:

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的丰度加权平均值,使用weight中的d2数据,以便绘制中的每个物种都是在最终计算中分配了他们对weight的独特观察。

新计算向量的第一个条目的预期输出将是函数的输出:

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

1 个答案:

答案 0 :(得分: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]))