2016-02-26 62 views
1

我是新的R和我有以下問題: 我正在使用一個data.frame的3000個obs一個6變量。新的R,我需要一些幫助總和行

 [PLOT] [SPP] [tree] [BA] [...] [] 
[1]  2  A  1  3 
[2]  2  B  2  2 
[3]  2  C  3  5 
[4]  3  A  1  4 
[5]  3  C  2  7 
[6]  4  B  1  4 
[7]  4  D  2  5 

[劇情]和[SPP]是的因素,[BA]是數字 我使用:

data1 <- ddply(data,c('PLOT','SPP'),summarise,BAtotal = sum(BA,na.rm=TRUE)) 

但我想這帶來的另一個山坳:每個SP和每個情節%BA。怎麼可能做到?可以用sapply做?

感謝

回答

0

我們可以用mutate代替summarise

library(plyr) 
ddply(data,c('PLOT','SPP'),mutate,BAtotal = sum(BA,na.rm=TRUE)) 

注意這隻會工作,如果 '數據' 是data.frame而不是matrix。看來OP的數據是matrix。在這種情況下,轉化爲data.frame

data <- as.data.frame(data) 

運行ddply代碼之前。

除了上面的代碼中,我們也可以用dplyr方法(應該會更快)

library(dplyr) 
data %>% 
    group_by(PLOT, SPP) %>% 
    dplyr::mutate(BAtotal = sum(BA, na.rm=TRUE)) 

或者data.table

library(data.table) 
setDT(data)[, BAtotal := sum(BA, na.rm=TRUE), by = .(PLOT, SPP)]