我有一个长格式的dataframe,它有四个列,有生计区、测量周期、观测值和预测值。我想对每个生计区的这些栏目做一些统计。我已经按字母顺序订购了生计区,因为我认为这可能对我有帮助。在此之后,我想到了一个for循环,它将遍历第一组相同的生计区域,并在整个数据帧的长度内这样做。但它并不像我希望的那样表演。因此,我的问题是,您如何告诉for循环,它应该执行其第一个循环,以及在超过固定数量行之后的循环?
让我知道,如果你想让我生产一个REPREX或我需要澄清的东西!非常感谢!
dfUG_abc <- dfUG[order(dfUG$`Livelihood zone`), ]
names_period_UG <- unique(dfUG$`Period of measurement Uganda`)
count_period_UG <- length(names_period_UG)
names_lv_UG <- unique(dfUG$`Livelihood zone`)
count_lv_UG <- length(names_lv_UG)
Spatial_lv_UG <- data.frame(matrix(ncol = 4, nrow = count_lv_UG))
colnames(Spatial_lv_UG) <- c("names", "bias", "RMSE", "accuracy")
Spatial_lv_UG[,1] <- names_lv_UG
Spatial_lv_UG <- Spatial_lv_UG[order(Spatial_lv_UG$names),]
for (i in 1:count_lv_UG){
Spatial_lv_UG[i,3]<-hydroGOF::rmse(dfUG_abc$`IPC class2`, dfUG_abc$`IPC class`)
Spatial_lv_UG[i,2]<-bias(dfUG_abc$`IPC class`, dfUG_abc$`IPC class2`)
}发布于 2019-12-12 16:27:09
考虑by (面向对象的tapply包装器)迭代列的级别或唯一值,并构建分组数据帧的列表。然后在最后运行一个do.call + rbind作为最终的主数据框架。使用这种方法,不需要初始化空数据帧来为其分配行,甚至不需要通过分组变量来排序列。
df_list <- by(dfUG, dfUG$`Livelihood zone`, function(sub) {
data.frame(zone = sub$`Livelihood zone`[1],
bias = bias(sub$`IPC class`, sub$`IPC class2`),
RMSE = hydroGOF::rmse(sub$`IPC class2`, sub$`IPC class`),
accuracy = NA)
})
Spatial_lv_UG <- do.call(rbind, df_list)由于您没有显示应该如何分配该列,所以上面在精度列中填充了NA。相应调整。
https://stackoverflow.com/questions/59307707
复制相似问题