2012-08-30 21 views
0

我在follwing方式佈置的數據幀之間:應用公式物種比較

Species Trait.p Trait.y Trait.z 
    a  20.1 7.2  14.1 
    b  20.4 8.3  15.2 
    b  19.2 6.8  13.9 

我想申請,對於每個物種組合,(XA) - (XB)式中X是性狀值和字母是物種,Xa> Xb。 I.e必須是這樣的,每種物種組合的較大值必須首先計算,針對每種性狀計算

這是一個多步驟的過程嗎?

一個例子輸出可能是

Combination Trait.p Trait.y Trait.z 
    a/b  0.3  1.1  1.1 
+1

該數據框的物種欄中有兩個b:您如何選擇一個? –

回答

0

我以爲你選擇的最大價值,但大衛帶來了一個好點。我懷疑這是最好的方法,但我認爲它會給你你想要的。請注意我說的交流,因爲我敢肯定,你的問題是一個複雜一點,只是a和b:

dat <- read.table(text="Species Trait.p Trait.y Trait.z 
    a  20.1 7.2  14.1 
    b  20.4 8.3  15.2 
    b  19.2 6.8  13.9 
    c  14.2 3.8  11.9", header=T) 

li <- lapply(split(dat, dat$Species), function(x) apply(x[, -1], 2, max)) 

com <- expand.grid(names(li), names(li)) 
inds <- com[com[, 1] != com[, 2], ] 
inds <- t(apply(inds, 1, sort)) 
inds <- inds[!duplicated(inds), ] 

ans <- lapply(1:nrow(inds), function(i) { 
    abs(li[[inds[i, 1]]]-li[[inds[i, 2]]]) 
}) 
cbind(Combination = paste(inds[, 1], inds[, 2], sep="/"), 
    as.data.frame(do.call(rbind, ans))) 

這給我們:

Combination Trait.p Trait.y Trait.z 
1   a/b  0.3  1.1  1.1 
2   a/c  5.9  3.4  2.2 
3   b/c  6.2  4.5  3.3 

對不起,沒有註釋的,但我前往課堂。

+0

我的猜測是第二個''b''實際上是一個''c「',儘管我會等待提問者確認。 –

+0

對不起,這是一個錯字 - 它意在成爲a,b,c在那一欄,對此感到抱歉。你的回答看起來會給我一個很好的起點 - 謝謝 –