簡體   English   中英

通過匹配第二個數據幀中的多列來查詢一個R數據幀

[英]querying one R data frame by matching multiple columns from a second data frame

假設我有一個數據集,該數據集描述了不同地點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)

我想使用d2weight數據在d1中生成一列,即weight加權平均數,以便在最終計算中為圖中的每個物種分配其唯一的weight觀測值。

新計算出的向量的第一項的預期輸出將是函數的輸出:

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

老式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]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM