我的数据框如下
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
如何获取上述数据框?
答案 0 :(得分:2)
我们可以使用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
或另一个base R
选项是tapply
with(df1, tapply(Basalarea, list(PlotNo, Species), FUN=sum))