簡體   English   中英

如何在 R 的 RMSE 計算中為每個 dataframe 子集列?

[英]How to subset a column for each dataframe in RMSE calculation in R?

我有兩個數據VobsVest 請參見下面的示例:

dput(head(Vobs,20))
structure(list(ID = c("LAM_1", "LAM_2", "LAM_3", "LAM_4", "LAM_5", 
"LAM_6", "LAM_7", "AUR_1", "AUR_2", "AUR_3", "AUR_4", "AUR_5", 
"AUR_6"), SOS = c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 
26), EOS = c(3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27)), row.names = c(NA, 
-13L), class = c("tbl_df", "tbl", "data.frame"))
dput(head(Vest,30))
structure(list(ID = c("LAM", "LAM", "LAM", "LAM", "LAM", "AUR", 
"AUR", "AUR", "AUR", "AUR", "AUR", "P0", "P01", "P01", "P02", 
"P1", "P2", "P3", "P4", "P13", "P14", "P15", "P17", "P18", "P19", 
"P20", "P22", "P23", "P24"), EVI_SOS = c(2, 6, 10, 14, NA, 20, 
24, 28, 32, 36, NA, 42, 42, NA, 48, 48, 52, 56, 60, 64, 68, NA, 
NA, 72, NA, 78, 82, 86, 90), EVI_EOS = c(3, 7, 11, 15, NA, 21, 
25, 29, 33, 37, NA, 43, 43, NA, 49, 49, 53, 57, 61, 65, 69, NA, 
NA, 73, NA, 79, 83, 87, 91), NDVI_SOS = c(4, 8, 12, 16, 18, 22, 
26, 30, 34, 38, 40, 44, 44, 46, 50, 50, 54, 58, 62, 66, 70, NA, 
NA, 74, 76, 80, 84, 88, 92), NDVI_EOS = c(5, 9, 13, 17, 19, 23, 
27, 31, 35, 39, 41, 45, 45, 47, 51, 51, 55, 59, 63, 67, 71, NA, 
NA, 75, 77, 81, 85, 89, 93)), row.names = c(NA, -29L), class = c("tbl_df", 
"tbl", "data.frame"))

我想計算兩個數據幀之間的均方根誤差 ( RMSE )。 例如,我假裝在EVI_SOSSOS列和VestEVI_SOS列之間進行RMSE ,涉及LAM ID(存在於兩個數據幀中)。 換句話說,我想對感興趣的 ID 的數據進行子集化。 在此示例中,我對VestLAM ID 和 Vobs 的LAM_3LAM_7 (即LAM_3LAM_4LAM_5LAM_6LAM_7感興趣

我一直在使用這段代碼:

sqrt(mean((Vobs$SOS - Vest$EVI_SOS)^2, na.rm=TRUE))

但我錯過了兩個不同數據幀的兩列的 ID 子集。 我怎樣才能使用這段代碼做子集?

任何幫助都感激不盡。

您可以獲得相關數據的子集:

library(stringr)
diff <- subset(Vobs, ID %in% paste0("LAM_", 3:7))$SOS - 
  subset(Vest, str_detect(ID, "LAM"))$EVI_SOS
sqrt(mean(diff^2, na.rm=TRUE))
#> [1] 2.44949

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM