[英]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.