我有一个称为PlantGroNoT.RCP2.first.0
的数据框(使用dput()对其进行了随机采样)。
structure(list(Year = c(2040L, 2068L, 2096L, 2049L, 2072L, 2042L,
2087L, 2047L, 2076L, 2075L, 2052L, 2054L, 2034L, 2060L, 2041L,
2031L, 2067L, 2080L, 2055L, 2067L, 2095L, 2097L, 2097L, 2077L,
2057L, 2038L, 2052L, 2095L, 2043L, 2075L), DOY = c(78L, 13L,
20L, 364L, 23L, 14L, 352L, 72L, 54L, 2L, 1L, 5L, 53L, 43L, 63L,
26L, 21L, 30L, 360L, 22L, 46L, 62L, 355L, 4L, 61L, 355L, 75L,
51L, 46L, 39L), DAP = c(93L, 28L, 35L, 14L, 38L, 29L, 2L, 87L,
69L, 17L, 16L, 20L, 68L, 58L, 79L, 41L, 36L, 45L, 10L, 37L, 61L,
78L, 5L, 20L, 77L, 5L, 90L, 66L, 61L, 54L), NSTD = c(0.244, 0,
0.023, 0, 0, 0, 0, 0.547, 0, 0, 0, 0, 0, 0, 0.148, 0, 0, 0.001,
0, 0, 0.186, 0.443, 0, 0, 0.278, 0, 0.403, 0.16, 0.085, 0.069
), RCP = c("2", "4", "4", "4", "2", "4", "8", "4", "8", "4",
"4", "4", "8", "4", "4", "2", "8", "8", "8", "4", "8", "2", "4",
"8", "4", "8", "4", "4", "8", "2")), row.names = c(5634575L,
1218676L, 788139L, 7051284L, 6262001L, 1122307L, 3560772L, 3925983L,
2584130L, 3401700L, 1217186L, 1455727L, 2993448L, 597952L, 5893799L,
6696664L, 2345802L, 3105731L, 6347255L, 5005396L, 3330449L, 780805L,
2522272L, 3668256L, 2099405L, 818891L, 1123257L, 5237622L, 1259779L,
1623133L), class = "data.frame")
我想用RCP
,DAP
和Year
过滤它。根据此过滤器的结果,我想取NSTD
的平均值并将其打印到数据框NSTDmean
HO1_2020_RCP2_stress
列中DAP
的范围是0到114,因此在HO1_2020_RCP2_stress$WSPDmean
的第一个单元格中,我想让DAP
== 0的NSTDmean,在第二个单元格中,DAP
== 1的均值,依此类推
我创建了这个循环来完成这项工作。
i = -1
repeat{
i= i+1
PlantGroNoT.RCP2.first.0 <- filter(PlantGroNoT_1, RCP==2 & DAP==i & Year<=2060)
H01_2020_RCP2_stress$NSTDmean <- mean(PlantGroNoT.RCP2.first.0$NSTD, na.rm=TRUE)
if (i>114)
break
}
过滤器和均值计算本身起作用。
但是,循环无法在NSTDmean
列中正确返回HO1_2020_RCP2_stress$WSPDmean
。它将始终为整个NSTDmean
列打印最后一个i的值(即DAS == 114)。
我希望我不要误会您想做什么,但我认为使用group_by
是有效的方法:
df %>%
filter(RCP == 2 & Year <= 2060) %>% # These are the only conditions and they are fixed
group_by(DAP) %>%
summarise(NTSDT = mean(NSTD,na.rm =TRUE)) %>%
arrange(DAP)
这将仅将数据帧过滤为RCP == 2且Year <= 2060的行。然后将总结所有DAP值的NSTD平均值。
如果需要将此结果附加到原始数据框中,则可以简单地将其加入或使用mutate
而不是摘要。