假设我有一个描述不同物种丰富度的数据集,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]
答案 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]))