【发布时间】:2020-01-12 02:45:03
【问题描述】:
我有一个代码适用于一个包含一年温度数据的数据框。
我正在尝试编写一个循环来将我的代码应用于多个数据集(目前只有两个 -> 所以两个国家)。为此,我使用以下方法将年度国家数据(csv 文件)作为列表读取:
setwd("/Users/lisak/Desktop/WeatherDataFiles")
files <- list.files(path=getwd(), pattern=".csv")
dfList <- lapply(files, function(f) {
df <- read.csv(f, header=TRUE)
})
通过我的循环,我正在尝试创建一个新变量(每个气象站的月平均温度 (STN_NAME)),该变量有效(我收到一个包含 2 个 yearlymean 数据框的列表)。 但是当我执行第二个循环将数据拆分为月份时,我会收到一个包含 2 个数据帧的列表,但它们都包含来自循环中最后一个数据集的数据。
yearlymean <- list()
monthlymean <- list()
for (i in 1:length(dfList)) {
yearlymean[[i]] <- aggregate((dfList[[i]])[,"MAX"] ,list(STN_NAME=(dfList[[i]])$STN_NAME, MONTH=(dfList[[i]])$MONTH), mean)
for (j in 1:length(yearlymean)) {
monthlymean[[j]] <- split(yearlymean[[i]], as.factor((yearlymean[[i]])$MONTH))
}
}
我不确定我在第二个循环中缺少什么,因此它不会保存第一个数据帧的拆分数据。 另外,有没有更好的编码方式? 谢谢
整个代码:
library(GSODR)
Moz <- get_GSOD(years = 2015, country = "Mozambique") # retreiving data from package
Zim <- get_GSOD(years = 2015, country = "Zimbabwe") # retreiving data from package
write.csv(Moz, file ="Mozambique_2015.csv") # saving data to WeatherDataFiles folder
write.csv(Zim, file = "Zimbabwe_2015.csv") # saving data to WeatherDataFiles folder
setwd("/Users/lisak/Desktop/WeatherDataFiles")
files <- list.files(path=getwd(), pattern=".csv")
dfList <- lapply(files, function(f) {
df <- read.csv(f, header=TRUE)
yearlymean <- list()
monthlymean <- list()
for (i in 1:length(dfList)) {
yearlymean[[i]] <- aggregate((dfList[[i]])[,"MAX"] ,list(STN_NAME=(dfList[[i]])$STN_NAME, MONTH=(dfList[[i]])$MONTH), mean)
for (j in 1:length(yearlymean)) {
monthlymean[[j]] <- split(yearlymean[[i]], as.factor((yearlymean[[i]])$MONTH))
}
}
})
【问题讨论】: