【发布时间】:2020-02-17 18:25:23
【问题描述】:
我正在尝试通过两个变量(“站点”和“年份”)对数据框进行子集化,并将函数 (dismo::biovars) 应用于每个子集。 Biovars 需要每月输入(12 个值)并每年输出 19 个变量。我想存储每个子集的输出并将它们组合起来。
示例数据:
data1<-data.frame(Meteostation=c(rep("OBERHOF",12),rep("SOELL",12)),
Year=c(rep(1:12),rep(1:12)),
tasmin=runif(24, min=-20, max=5),
tasmax=runif(24, min=-1, max=30),
pr=runif(24, min=0, max=300))
完整的数据集包含 900 个站点和 200 年。
我目前正在尝试嵌套循环,我意识到这不是最有效的,而且我正在努力实现它 - 代码如下:
sitesList <- as.character(unique(data1$Meteostation))
#yearsList<- unique(data1$Year)
bvList<-list()
for (i in c(1:length(unique(sitesList)))) {
site<-filter(data1, Meteostation==sitesList[i])
yearsList[i]<-unique(site$Year)
for (j in c(1:length(yearsList))){
timestep<-filter(site,Year==yearsList[j])
tmin<-timestep$tasmin
tmax<-timestep$tasmax
pr<-timestep$pr
bv<-biovars(pr,tmin,tmax)
bvList[[j]]<- bv
}}
bv_all <- do.call(rbind, bvList)
我知道有很多更好的方法可以解决这个问题,并且一直在寻找 apply 和 dplyr 解决方案的变体,但我正在努力解决这个问题。非常感谢任何建议。
【问题讨论】:
标签: r loops dplyr subset apply