使用带有计数的数据来添加零和 NA

Using tapply on data with counts to add zeros and NAs

我有一个数据库,包括:物种 ID(作为因素)、计数、站点、访问、年份。在这里找到一个子集 [Google Drive]

我想创建一个具有以下维度的 4D 数组:物种、站点、访问和年份。计数为单元格值。为此,我使用以下代码:

y<-tapply(counts,list(species,site,visit,year), sum) 

有些网站多年来并没有被访问过。因此在单元格中获取 NA,这实际上很好。我的问题是,在给定的访问和年份访问了某些站点,但没有看到该物种。原始数据库仅显示计数(少数例外除外)。因此,代码为这些单元格提供了一个 NA 值,但我想要一个 0 值。

有人对如何在访问过站点但未看到物种时添加这些 0 值单元格,同时在未访问站点时保留 NA 有任何建议吗?

非常感谢。

鉴于您的数据在 data.frame df

library(reshape2)

tmp <- dcast(df, site + visit + year ~ species, value.var = 'counts', fill = 0)
df <- melt(tmp, id.vars = c('site', 'visit', 'year'), variable.name = 'species', value.name = 'counts')
y <- tapply(df$counts, list(df$species, df$site, df$visit, df$year), sum)