Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对于循环长数据帧格式,对于每个分组变量的循环,并输出到新数据帧_R_Loops_Dataframe_Spatial - Fatal编程技术网

R 对于循环长数据帧格式,对于每个分组变量的循环,并输出到新数据帧

R 对于循环长数据帧格式,对于每个分组变量的循环,并输出到新数据帧,r,loops,dataframe,spatial,R,Loops,Dataframe,Spatial,我有一个长格式的数据框,它有四列,分别是livelihoodzones、测量周期、观察值和预测值。我想对每个生计区的这些栏目做一些统计。我已经按字母顺序排列了生计区,因为我认为这可能会对我有所帮助。在这之后,我考虑了一个for循环,它将遍历第一组相同的区域,并在整个数据帧长度上都这样做。但它的表现并不像我希望的那样。所以我的问题是,如何告诉for循环它应该在固定数量的行上执行第一个循环和之后的循环 如果你想让我生产REPREX或者我需要澄清一些事情,请告诉我!非常感谢 dfUG_abc <

我有一个长格式的数据框,它有四列,分别是livelihoodzones、测量周期、观察值和预测值。我想对每个生计区的这些栏目做一些统计。我已经按字母顺序排列了生计区,因为我认为这可能会对我有所帮助。在这之后,我考虑了一个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`)
}
dfUG_abc考虑通过
(面向对象的包装到
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)
df_list考虑通过
(面向对象的包装到
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)
df\u列表