是否有用于在聚合数据上设置行的 R 函数?

Is there an R function for setting rows on aggregate data?

我正在使用的数据来自 eBird,我希望按名称和年份对物种出现情况进行分类。有超过 30k 个单独的观察结果,每个观察结果都有自己的鸟类数量。根据我在下面发布的原始数据,2021 年 1 月 1 日有人观察到 2 只库珀鹰等

原始看起来像这样:

specificName   indivualCount  eventDate  year
Cooper's Hawk    1    (1/1/2018)   2018
Cooper's Hawk    1    (1/1/2020)    2020
Cooper's Hawk    2    (1/1/2021)    2021

理想情况下,我可以根据观察到的 year 对所有 Cooper's Hawks specificName 进行分组,并将总数 invidualcounts 相加。这样我就可以对 2018 年、2019 年、2020 年和 2021 年观察到的鸟类数量进行统计比较。

我为年份创建了单独的列
year <- as.POSIXct(ebird.df$eventDate, format = "%m/%d/%Y") ebird.df$year <- as.numeric(format(year, "%Y"))

然后汇总如下:
aggdata <- aggregate(ebird.df$individualCount , by = list( ebird.df$specificname, ebird.df$year ), FUN = sum)

有数百种鸟类,因此 Cooper's Hawks 从第 115 行开始,因此输出如下所示:

  Group.1   Group.2    x
115   2018  Cooper's Hawk  86
116   2019  Cooper's Hawk  152
117   2020  Cooper's Hawk  221
118   2021  Cooper's Hawk  116

我的问题是如何将数据放入如下所示的 table 中:

Species Name   2018 2019 2020 2021
Cooper's Hawk   86   152  221  116

我最终想 运行 使用 vegan 对数据进行一些基本的生态统计,但我想首先要解决一个问题,哈哈
谢谢!

题目中的数据和代码有错误,所以我们使用了最后注释中给出的代码和可重现的数据。

现在,使用 xtabs 我们可以像这样直接从 ebird.df 得到一个 xtabs table。没有使用包。

xtabs(individualCount ~ specificName + year, ebird.df)
##                year
## specificName    2018 2020 2021
##   Cooper's Hawk    1    1    2

可选择将其转换为 data.frame:

xtabs(individualCount ~ specificName + year, ebird.df) |> 
  as.data.frame.matrix()
##               2018 2020 2021
## Cooper's Hawk    1    1    2

虽然我们不需要使用 aggdata,但如果您出于其他原因需要它,那么可以使用 aggregate.formula 计算它,如下所示:

aggregate(individualCount ~ specificName + year, ebird.df, sum)

备注

Lines <- "specificName,individualCount,eventDate,year
\"Cooper's Hawk\",1,(1/1/2018),2018
\"Cooper's Hawk\",1,(1/1/2020),2020
\"Cooper's Hawk\",2,(1/1/2021),2021"
ebird.df <- read.csv(text = Lines, strip.white = TRUE)