我是R的新手,我有以下问题: 我正在使用的数据框架超过3000个障碍物和6个变量。
[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
[PLOT]和[SPP]是因子,[BA]是数字 我正在使用:
data1 <- ddply(data,c('PLOT','SPP'),summarise,BAtotal = sum(BA,na.rm=TRUE))
但是我想要另一个col:每个SP和每个情节的%BA。怎么可能呢?可以用sapply吗?
由于
答案 0 :(得分: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)]