2016-01-20 74 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

相關問題