-2
我是一個新的,仍然在學習R.到目前爲止,我看過的幾篇文章並沒有很有幫助。下標越界R
所以,我的結果數據幀df.results
看起來是這樣的:
| Age | Flock | Year | Heating | Cooling
------------------------------------------------------
1 | 1 | 1 | 2010 | 266.5788 | 0
2 | 1 | 1 | 2010 | 275.4562 | 0
3 | 1 | 1 | 2010 | 285.1423 | 0
...
200000 | 15 | 28 | 2020 |-39.84244 | 275.8492
...
400000 | 35 | 45 | 2030 |-41.09734 | 284.5375
...
900000 | 12 | 300 | 2040 |-42.22414 | 292.3389
...
150000 | 22 | 181 | 2050 | 28.9140 | 0
...
250000 | 34 | 322 | 2070 | -38.5952 | 430.8928
...
所以,Flock
範圍爲1〜322而Year
從2010年進入到2090,10(9個不同的值)的步驟。
我的目標是創建每年每羣有322行(羣)和9列(年),總和爲Heating
(第1矩陣)和Cooling
(第2矩陣)的矩陣。
我試過這段代碼:
list.years <- seq(2010, 2090, 10)
nyears <- length(list.years)
f <- 322
sum.heat <- matrix(0, f, length(nyears))
sum.cool <- matrix(0, f, length(nyears))
for(j in 1:nyears){
for(i in 1:f){
sum.heat[i,j] <- sum(df.results$Heating[df.results$Flock == i], na.rm = TRUE)
sum.cool[i,j] <- sum(df.results$Cooling[df.results$Flock == i], na.rm = TRUE)
}}
出於某種原因,這是行不通的:
Error in `[<-`(`*tmp*`, i, j, value = sum(df.results$Ventilation[df.results$Flock == : subscript out of bounds
我試着在網上找到的幾種方法,但我不明白,爲什麼我的是不工作。我也嘗試使用「新的矩陣」作爲「數據框架」,但沒有成功。
非常感謝,如果任何人都可以幫助或建議不同的方法來完成這項工作。 (P. S.請讓我知道如果這不清楚,我很樂意以不同的方式編輯或解釋它)。
謝謝!
非常感謝Z.Lin。它工作得很好。這正是我所期待的。我的C++訓練有素的頭腦保留了循環作爲幾乎所有內容的第一選項。感謝您提供的資源,我認爲它包含不同的包來替代for循環,對嗎? – madmex
@JorgeIzar:對C++來說,對於我們這些有其他語言經驗的人來說,默認循環的願望並不是唯一的。 :)但是,記住R針對向量化函數進行了優化是很好的。人們通常使用的兩個軟件包是'data.table'和[tidyverse](https://www.tidyverse.org/)集合(其中包括'dplyr','tidyr'等)。 [這篇文章](https://stackoverflow.com/questions/21435339/data-table-vs-dplyr-can-one-do-something-well-the-other-cant-or-does-poorly)比較他們的親戚優點。 –