【发布时间】:2020-12-29 03:22:57
【问题描述】:
我有两个列表,每个列表有四个数据框。两个列表(“loc_list_future”和“loc_list_2019”)中的数据框有 33 列:“年份”,然后是 32 个不同气候模型的平均降水值。
loc_list_future 中的数据框看起来像这样,但总共有 32 个模型列,数据到 2059 年:
Year Model 1 Model 2 Model 3 ...Model 32
2020 714.1101 686.5888 1048.4274
2021 1018.0095 766.9161 514.2700
2022 756.7066 902.2542 906.2877
2023 906.9675 919.5234 647.6630
2024 767.4008 861.1275 700.2612
2025 876.1538 738.8370 664.3342
2026 781.5092 801.2387 743.8965
2027 876.3522 819.4323 675.3022
2028 626.9468 927.0774 696.1884
2029 752.4084 824.7682 835.1566
...
2059
loc_list_2019 中的数据框的年份从 2006 年到 2019 年不等,但其他看起来都一样。
每个数据框代表一个地理位置,两个列表具有相同的四个位置,但一个列表用于 2006-2019 年的值,另一个用于未来的值。
我想运行两个样本的 t 检验,将 2006-19 年的值与每个位置的每个模型的未来值进行比较。
我有另一个列表 (loc_list_OBS),它的数据帧只有两列“Year”和“Mean_Precip”(这是观察到的数据,不是基于模型的,这就是为什么只有一列用于平均 precip)。我有代码(见下文)将对观察数据(loc_list_OBS)针对未来数据(loc_list_future)运行两个样本t检验,但我不确定如何更改此代码以对两个列表运行t检验每个有 32 个模型。
myfun <- function(x,y)
{
OBS_Data <- x$Mean_Precip
#Empty list
List <- list()
#Now loop
for(i in 2:dim(y)[2])
{
#Label
val <- names(y[,i,drop=F])
Future_Data <- y[,i]
#Test
test <- t.test(OBS_Data, Future_Data, alternative = "two.sided")
#Save
List[[i-1]] <- test
names(List)[i-1] <- val
}
return(List)
}
t.stat <- mapply(FUN = myfun,x=loc_list_OBS,y=loc_list_future, SIMPLIFY = FALSE)
【问题讨论】:
标签: r loops statistics t-test