我仍然學習使用data.table(從data.table包),甚至在尋找網絡和幫助文件的幫助後,我仍然努力做我想做的事情。 我有一個超過60列(前三個對應的因素和其餘的響應變量,在這種情況下不同的物種)和數行對應的不同級別的治療和物種丰度大型數據表。一個非常小的版本是這樣的:協同矩陣從一個社區名單與分組因素
> TEST<-data.table(Time=c("0","0","0","7","7","7","12"),
Zone=c("1","1","0","1","0","0","1"),
quadrat=c(1,2,3,1,2,3,1),
Sp1=c(0,4,29,9,1,2,10),
Sp2=c(20,17,11,15,32,15,10),
Sp3=c(1,0,1,1,1,1,0))
>setkey(TEST,Time)
> TEST
Time Zone quadrat Sp1 Sp2 Sp3
1: 0 1 1 0 20 1
2: 0 1 2 4 17 0
3: 0 0 3 29 11 1
4: 12 1 1 10 10 0
5: 7 1 1 9 15 1
6: 7 0 2 1 32 1
7: 7 0 3 2 15 1
我需要計算的協方差的總和每個X區樣方羣。如果我只有一個給定Zone x樣方組合的物種列表,那麼我可以使用cov()函數,但使用cov()的方式與我將使用mean()或sum()的方式相同
Abundance = TEST[,lapply(.SD,mean),by="Zone,quadrat"]
我得到以下錯誤消息不起作用:
Error in cov(value) : supply both 'x' and 'y' or a matrix-like 'x'
我明白爲什麼,但我無法弄清楚如何解決這個問題。
我真正想要的是能夠獲得,對於每個Zone x樣方組合,所有物種的所有采樣時間點的協方差矩陣。從每個矩陣中,我需要計算所有物種對的協方差總和,這樣我就可以得到每個區域x樣方組合的協方差總和。
任何幫助將不勝感激,謝謝。
您的'test'不起作用,因爲列的長度不一樣。它也不像你在這裏展示的'TEST'。另外,你是否需要'Time'變量作爲例子?最後,你想要的輸出是什麼樣的?矩陣列表? – Frank
我的道歉,錯誤的版本複製在:我編輯了問題,以糾正它。是的,我需要Time變量,因爲這是應該計算協方差的變量。我也編輯了這個問題,以更具體地說明我在找什麼。 –
好吧,像'TEST [,sum(upper.tri(cov(.SD))),by ='Zone,quadrat',。SDcols = paste('Sp',1:3,sep ='')] '? – Frank