【问题标题】:Using tapply on data with counts to add zeros and NAs在带有计数的数据上使用 tapply 来添加零和 NA
【发布时间】:2016-03-30 10:41:51
【问题描述】:

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

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

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

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

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

提前非常感谢。

【问题讨论】:

  • 请在问题中包含您的数据,因为链接可能会随着时间的推移而中断或更改。

标签: r database tapply


【解决方案1】:

鉴于您的数据在 data.framedf 中

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)

【讨论】:

  • 谢谢各位达纳斯!有用。我只将函数 sum 添加到 dcast 中,以便在值不为零时得到观察值的总和。 tmp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2012-10-17
相关资源
最近更新 更多