使用R的dcast通过平均值与缺少的条目进行聚合

时间:2017-06-09 10:16:59

标签: r reshape2 dcast

我是使用reshape2及其功能的新手。我有一个数据表,d,我正在尝试汇总多年来车站物种数量的数据,以获得每年所有站点的每个物种的平均数:

d<-data.table(station=c(1,1,4,3),year=c(2000,2000,2001,2000),
   species=c("cat","dog","dog","owl"),abundance=c(10,20,30,10))
d

>   station year species abundance
 1:       1 2000     cat        10
 2:       1 2000     dog        20
 3:       4 2001     dog        30
 4:       3 2000     owl        10

我使用dcast来聚合丰度,但我似乎得到的是一个忽略NaN结果而不是平均值的总和:

dm<-dcast(d, year~ species,value.var="abundance",fun.aggregate = mean)
dm
>   year cat dog owl
 1: 2000  10  20  10
 2: 2001 NaN  30 NaN

我想要的是:

>   year  cat   dog   owl
 1: 2000  3.33  6.67  3.33
 2: 2001  0     30    0

使用argment fill = 0只会导致NaN被0替换。

我非常感谢任何建议。我已阅读文档并寻找教程,但未能解决此问题。

2 个答案:

答案 0 :(得分:0)

使用术语&#34;表示&#34;不是特别标准。我认为创建一个名为mean_abundance的新变量将是最好的解决方案。

d[, mean_abundance := abundance/length(abundance), by = year]

dm <- dcast(d, year~ species,value.var="mean_abundance")
dm[is.na(dm)] <- 0

答案 1 :(得分:0)

我们可以使用FlexBox

执行此操作
customData