[英]Aggregating over 2 columns of a dataframe R
我的数据框如下
TreeID Species PlotNo Basalarea
12345 A 1 120
13242 B 7 310
14567 D 8 250
13245 B 1 305
13426 B 1 307
13289 A 3 118
我用了
newdata<- aggregate(Basalarea~PlotNo+Species, data, sum, na.rm=TRUE)
汇总所有值,以便
newdata
Species PlotNo Basalarea
A 1 120
A 3 118
B 1 some value
B 7 310
D 8 250
这很棒,但是我想要一个这样的数据框
PlotNo A B D
1 120 some value 0
3 118 0 0
7 0 310 0
8 0 0 250
如何获得以上数据框?
我们可以使用dcast
将长格式转换为宽格式。 将fun.aggregate
指定为sum
。
library(reshape2)
dcast(df1, PlotNo~Species, value.var='Basalarea', sum)
# PlotNo A B D
#1 1 120 612 0
#2 3 118 0 0
#3 7 0 310 0
#4 8 0 0 250
否则, base R
选项将使用xtabs
。 默认情况下,对于“ PlotNo”和“ Species”的组合,它获取“ Basalarea”的sum
。
xtabs(Basalarea~PlotNo+Species, df1)
# Species
#PlotNo A B D
# 1 120 612 0
# 3 118 0 0
# 7 0 310 0
# 8 0 0 250
或tapply
另一个base R
选项
with(df1, tapply(Basalarea, list(PlotNo, Species), FUN=sum))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.