簡體   English   中英

是否有用於在聚合數據上設置行的 R 函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM