【发布时间】:2020-07-07 18:57:59
【问题描述】:
如果不解决每个单独的部分,我不知道如何做到这一点。我有一个初始时间序列数据集,我将其拆分为代表每个月的 12 个数据帧的列表。在每个月内,我想在每个唯一站点上运行计算和 ggplot,而不必调用每个单独的站点。目前的结构如下:
$ April :'data.frame': 9360 obs. of 15 variables:
..$ site_id : int [1:9360] 1003 1003 1003 1003 1003 1003 1003 1003 1003 1003 ...
..$ UTC_date.1 : Date[1:9360], format: "2005-04-01" "2005-04-02" "2005-04-03" "2005-04-04" ...
..$ POSIXct : POSIXct[1:9360], format: "2005-04-01 06:00:00" "2005-04-02 06:00:00" "2005-04-03 06:00:00" "2005-04-04 06:00:00" ...
..$ swe_mm : num [1:9360] 45.9 44.6 43.5 42.4 41.2 ...
..$ fsca : num [1:9360] 1 1 1 1 0.997 ...
..$ snoht_m : num [1:9360] 0.303 0.239 0.21 0.186 0.165 ...
..$ swe_mm.1 : num [1:9360] 45.9 44.6 43.5 42.4 41.2 ...
..$ fsca.1 : num [1:9360] 1 1 1 1 0.997 ...
..$ snoht_m.1 : num [1:9360] 0.303 0.239 0.21 0.186 0.165 ...
..$ actSWE_mm : num [1:9360] 279 282 282 282 282 284 292 295 295 295 ...
..$ actSD_cm : num [1:9360] 79 79 NA 79 79 81 185 81 81 81 ...
..$ swe_Res_mm : num [1:9360] 233 237 238 240 241 ...
..$ snoht_Res_m : num [1:9360] 0.487 0.551 NA 0.604 0.625 ...
..$ swe_Res1_mm : num [1:9360] 233 237 238 240 241 ...
..$ snoht_Res1_m: num [1:9360] 0.487 0.551 NA 0.604 0.625 ...
如果我将它完全应用于每个数据帧,我可以使用 lapply 毫无问题地计算标准化 rmse:
stdres.fun <- function(data,x,out) {data[out] <- data[[x]] / ((sum(data[[x]]^2, na.rm = TRUE)/NROW(data))^.5); data}
monthSplit <- lapply(monthSplit, stdres.fun, x = "swe_Res_mm", out="stdSWE_res")
但是,我无法弄清楚如何对每个唯一的 site_id 运行此计算。我的意思是有 32 个不同的站点。它们是每个数据框中的相同站点,但是我想计算列表中每个数据框中每个站点的 rmse。因此,如果我有站点 946 和 1003,则计算将分别在每个站点上运行,而不是一起运行。
我假设我可以将数据进一步拆分到不同的列表中,但我觉得这会比现在更混乱。我还有其他方法可以做到这一点吗?
【问题讨论】:
-
这是一个案例,如果一个可重复的例子会有很长的路要走,你能分享你的数据的
dput()或dput(head())的输出吗? -
我试过了,但是输出对于控制台窗口来说太长了,所以它会被切断。还有其他方法吗?