[英]Is there an R function for setting rows on aggregate data?
我正在使用的數據來自 eBird,我希望通過名稱和年份來分類物種的出現。 有超過 30,000 個單獨的觀測值,每個觀測值都有自己的鳥類數量。 根據我在下面發布的原始數據,在 2021 年 1 月 1 日,有人觀察到 2 Cooper's Hawks 等。
原始看起來像這樣:
具體名稱個人計數事件日期年份
庫珀的鷹 1 (1/1/2018) 2018
庫珀的鷹 1 (1/1/2020) 2020
庫珀之鷹 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 庫珀之鷹 86
116 2019 庫珀之鷹 152
117 2020 庫珀之鷹 221
118 2021 庫珀的鷹 116
我的問題是如何將數據放入如下所示的表中:
物種名稱 2018 2019 2020 2021
庫珀的鷹 86 152 221 116
我想最終使用vegan
對數據進行一些基本的生態統計,但我想首先有一個問題,哈哈
謝謝!
問題中的數據和代碼存在錯誤,所以我們使用了最后注釋中給出的代碼和可重現的數據。
現在,使用 xtabs 我們可以像這樣直接從 ebird.df 獲得一個 xtabs 表。 不使用任何包。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.