的子集我有一個數據幀:與tapply()與ddply {plyr}在R的輸出工作:長度不等
> df <- data.frame(
+ Species = rep(LETTERS[1:4], times=c(5,6,7,6)),
+ Length = rep(11:14, each=3)
+)
>
> df
我需要能夠計數在一定的個體數量長度每種物種(即物種A中有多少個體的長度爲1,2,3等)?然後,我需要對輸出執行一系列附加分析。例如,我需要計算每個長度的個體密度,以及從一個長度類別到下一個長度類別的密度的減少。
這很容易,如果我第一子集中的數據:
Spec.A<-df[df$Species=="A",]
#count number of specimens of each length;
count<-table(Spec.A$Length)
count
#calculate density per length category (divide by total area sampled =30)
density<-count/(30)
density
#calculate the decrease in density (delta.N) from one length category to the next;
delta.N<-diff(density, lag=1, differences=1)
delta.N
的問題是,我需要(通過每個子集,即循環)做這些計算每個物種。一方面,我可以使用tapply()和一個使用table()的函數;另一方面,
#function: count number of specimens of each length;
count<-function(x){
table(x)
}
Number<-tapply(df$Length, df$Species, FUN=count, simplify=FALSE)
Number
這給了我我想要的,但輸出的格式很時髦,我無法弄清楚如何對結果進行額外的分析。
我一直在使用ddply()從plyr試過了,是這樣的:
ddply(df$Length, df$Species,
count)
但我很清楚沒有它的權利,我甚至不能確定ddply()是適合我的問題,因爲我對每個物種的觀測長度都有不同的數目。
我應該更密切地關注plyr中的其他選項嗎?或者有沒有辦法編寫for循環來做我需要的?
這樣做是一個簡單的方法我不知道你到底是什麼問題,但是,這是我做什麼,你的犯罪嫌疑人第一步應該是決定你希望你的輸出包含什麼_exactly_。使用所需信息繪製具有列名稱和值的數據框。這可能會讓你(和我們)知道該怎麼做的一些線索。 – joran
@gkcn:這些數據來自哪裏?你是OP嗎? – ThiefMaster
@ThiefMaster這是來自原始帖子的數據,我剛剛打印出來看看究竟是什麼。 – gkcn